-
Notifications
You must be signed in to change notification settings - Fork 0
Updating a Git Baselibs Component
This will use cURL as an example.
First, clone the component:
$ git clone git@developer.nasa.gov:mathomp4/ESMA-Baselibs-curl.git
$ cd ESMA-Baselibs-curl
$ git remote update
$ git pull (if necessary)
Next, move to the vendor branch:
$ git checkout vendor
(Note, if vendor doesn't exist yet, make it with git checkout -b vendor)
Synchronize the code:
$ rsync -avi --exclude '.gitignore' --exclude '.git' /ford1/share/gmao_SIteam/Baselibs/Submodules/curl-7.53.1/ /ford1/share/gmao_SIteam/Baselibs/Submodules/ESMA-Baselibs-curl/
Now, this can be dangerous. If you know some files need to be kept because of patches, then --exclude them or copy them away and restore. The next thing to do is to make sure things are the same/similar:
$ xxdiff -r /ford1/share/gmao_SIteam/Baselibs/Submodules/curl-7.53.1/ /ford1/share/gmao_SIteam/Baselibs/Submodules/ESMA-Baselibs-curl/
Examine that. If files or directories need to be deleted, you can either re-run the above rsync with --delete, or do so manually.
Once you are satisfied that the code is correct, commit and tag:
$ git add .
$ git commit -m 'Update cURL to 7.53.1'
$ git tag -a vendor/7.53.1 -m "Tag vendor/7.53.1"
If you need to check things out, run tig to verify:
$ tig --all
Now merge to master:
$ git checkout master
$ git merge vendor
$ git push --all
$ git push --tags
The all push moves both branches over, and the tags for the vendor tag.
Because the .gitmodules file that submodules works with only accepts branches, we create a "fake" version branch, push it, and do a normal tag:
$ git branch version/7.53.1
$ git push origin version/7.53.1
$ git tag -a 7.53.1 -m "Tag version 7.53.1"
$ git push --tags
Don't forget to then update the .gitmodules in the main ESMA-Baselibs repo to refer to the new version/ branch. To do this, first do a nice clean checkout of the repo for safety:
$ git clone --recursive git@developer.nasa.gov:mathomp4/ESMA-Baselibs.git
Then, you can go into it and edit .gitmodules. Once you've changed the branch to use then issue:
$ git submodule update --remote
If you have more than one, you can leave off the component and it will update all the submodules.
Now you can commit your changes, and push. First:
$ git status
Make sure you see the updates for the submodules like:
$ git status
On branch master
Your branch is up to date with 'origin/master'.
Changes not staged for commit:
(use "git add ..." to update what will be committed)
(use "git checkout -- ..." to discard changes in working directory)
modified: .gitmodules
modified: Arch.mk
modified: Base.mk
modified: CONTENTS
modified: ChangeLog
modified: GNUmakefile
modified: INSTALL
modified: README
modified: VERSION
modified: cdo (new commits)
modified: curl (new commits)
modified: esmf (new commits)
modified: esmf_rules.mk
modified: nco (new commits)
modified: netcdf (new commits)
Submodules changed but not updated:
* cdo 4ece165...1595029 (1):
> Merge branch 'vendor'
* curl 05e9abd...ae61aef (1):
> Update cURL to 7.60.0
* esmf 433c628...eccfad6 (1):
> Merge branch 'vendor'
* nco 5ed56ad...23f4000 (1):
> Update NCO to 4.7.4
* netcdf c45c7c2...871d029 (2):
> Merge branch 'vendor'
> Merge branch 'vendor'
no changes added to commit (use "git add" and/or "git commit -a")
Once that's done, commit with a good message (usually what the new stuff added to ChangeLog is):
$ git add .
$ git commit
$ git push
$ git tag -a 5.1.1 -m "Tag version 5.1.1"
$ git push --tags
$ git