User Tools

  • Logged in as: anonymous (anonymous)
  • Log Out

Site Tools


mantisbt:git_submodules

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
mantisbt:git_submodules [2013/08/30 19:35]
dregad Solution for With Submodules --> No Submodules
mantisbt:git_submodules [2014/04/30 13:00] (current)
dregad Added update from within the submodule (phpmailer example)
Line 1: Line 1:
 ====== Working with Git Submodules in MantisBT ====== ====== Working with Git Submodules in MantisBT ======
- 
-//​work-in-progress...//​ 
  
 Some [[3rdpartycode|3rd party libraries]] are stored and maintained in the MantisBT repository ​ Some [[3rdpartycode|3rd party libraries]] are stored and maintained in the MantisBT repository ​
-using [[http://​git-scm.com/​book/​en/​Git-Tools-Submodules|Git Submodules].+using [[http://​git-scm.com/​book/​en/​Git-Tools-Submodules|Git Submodules]].
  
 This setup requires some special handling when initializing the repository and when switching branches, This setup requires some special handling when initializing the repository and when switching branches,
Line 96: Line 94:
 git submodule foreach git checkout -- . git submodule foreach git checkout -- .
 </​code>​ </​code>​
 +
  
  
Line 102: Line 101:
 Checking out a branch with Submodules when the current branch has the same submodules but pointing to a different commit. Checking out a branch with Submodules when the current branch has the same submodules but pointing to a different commit.
  
-@@@+For example, branch SubmodulesNew has an updated ADOdb library: 
 +<​code>​ 
 +$ git status 
 +# On branch SubmodulesOld 
 +nothing to commit, working directory clean 
 + 
 +$ git checkout SubmodulesNew 
 +M library/​adodb 
 +Switched to a new branch '​SubmodulesNew'​ 
 +</​code>​ 
 + 
 +**Solution** 
 + 
 +Just update the submodule(s)... 
 + 
 +<​code>​ 
 +$ git submodule update  
 +Submodule path '​library/​adodb':​ checked out '<​commit sha>'​ 
 +</​code>​ 
 + 
 + 
 + 
 + 
 + 
 + 
 + 
 +===== Updating a Library'​s submodule ===== 
 + 
 +This section describes the process to update a submodule when a new version of a library has been released upstream. 
 + 
 +==== Updating via an external repository ==== 
 + 
 +The example given here are for the ADOdb library, but the same logic should apply (possibly with some variations) to other submodules as well. 
 +We assume that you already have a local repository configured with the appropriate remotes (//​upstream//​ for the library'​s official repository and //origin// for the MantisBT fork) 
 + 
 +  - Update the library'​s fork in the //​mantisbt//​ Github organization  
 +    * Get the latest from upstream <​code>​ 
 +cd /​path/​to/​local/​adodb 
 +git fetch upstream 
 +</​code>​ 
 +    * Optional: update the //master// branch <​code>​ 
 +git rebase upstream/​master master 
 +</​code>​ 
 +    * Update the branch <​code>​ 
 +git checkout mantis-1.3 
 +git merge v5.19 
 +</​code>​ 
 +    * Resolve any conflicts 
 +    * Push changes to the fork <​code>​ 
 +git push origin --tags master mantis-1.3 
 +</​code>​ Note that it's not strictly necessary to push the tags or the master branch. Having the tags allows a better description of the submodule'​s current commit when running ''​git submodule''​ (see example at the end of this section) 
 +  - Update the submodule 
 +    * Go to your local mantisbt repository and update it<​code>​ 
 +cd /​path/​to/​mantisbt 
 +git checkout master 
 +git pull 
 +</​code>​ 
 +    * Go to the submodule'​s directory and checkout the branch <​code>​ 
 +cd library/​adodb 
 +git checkout mantis-1.3 
 +git pull 
 +cd .. 
 +</​code>​ 
 +  - Update ''​README.libs''​ to reflect the new version 
 +  - Commit the changes <​code>​ 
 +git commit -a 
 +</​code>​ 
 + 
 +At this point, checking the submodules'​ status should give you a "​clean"​ list , e.g. (notice no '​+'​ sign in column 1) 
 + 
 +<​code>​ 
 +$ git submodule  
 + ​9346d288a1b7f7a50cc35b6a0e56d29e9d000ecf adodb (v5.19-6-g9346d28) 
 + ​75a4e5595c0dfcb2e2e1e41b9ba2282828d3f292 disposable (release-2.0.0-3-g75a4e55) 
 + ​cb771839899d9f6be9f1268b986c30327ff1199b phpmailer (v5.2.6-2-gcb77183) 
 + ​41beaddd279c695aacb63407e2c98b04b7eaff51 securimage (heads/​mantis) 
 +</​code>​ 
 + 
 +==== Updating from within the submodule ==== 
 + 
 +It's worth mentioning that step 1 above can also be performed straight from the submodule itself (see example below for phpmailer), provided of course that the remotes (origin and upstream) have been properly configured. 
 + 
 +**WARNING**:​ if you update the submodule in-place, it is critical that you actually push the changes to //origin// otherwise the other developers will have an corrupted repository with missing commits when they pull the changes. 
 + 
 +  * Update the submodule from upstream <​code>​ 
 +cd library/​phpmailer 
 +git fetch upstream 
 +git rebase upstream/​master master 
 +git checkout mantis 
 +git merge v5.2.7 
 +# Resolve conflicts 
 +</​code>​ 
 +  * Push changes to the fork - **don'​t forget this step !**<​code>​ 
 +git push origin --tags master mantis 
 +cd .. 
 +</​code>​ 
 +  * Edit ''​README.libs''​ 
 +  * Commit the changes <​code>​ 
 +git commit -a 
 +</​code>​ 
  
mantisbt/git_submodules.1377905726.txt.gz · Last modified: 2013/08/30 19:51 (external edit)