Currently I have 5 projects on my computer which use WinLamb library. So far I’ve been keeping copies of the library directory on each project; these directories are kept in sync with FreeFileSync Portable. Although this approach works, it’s very cumbersome.
Since each project is versioned as a Git repository, and WinLamb itself is a Git repository on GitHub, I started searching for an alternative, and I choose Subtree over Submodule. Following is a summary of the commands I needed to do on my Windows 7 x64, using Git portable v2.13.1:
1. Remote
Add a remote with the path to the repository of the shared project:
git remote add otherproj --no-tags git@github.com:username/otherproj.git
Or if a local project:
git remote add otherproj --no-tags d:/stuff/otherproj
You can view the remotes with:
git remote -v
2. Subtree
Run the Subtree command:
git subtree add --prefix otherproj otherproj master --squash
This will copy the library into the subdirectory and create a commit, with the hash in the message. It’s unnecessary, but you can provide a custom message for the subtree commit:
git subtree add --prefix otherproj otherproj master --squash -m "Subtreeing otherproj."
3. Updating
To update your project with new library code:
git subtree pull --prefix otherproj otherproj master --squash
This leads us to a nice bash function to our ~/.bashrc
file:
function gitsubtreepull { git subtree pull --prefix $1 $1 master --squash; }
Which eases our life when updating our Subtree library:
gitsubtreepull otherproj
So far this approach seems to the better than the old-fashioned directory sync, although it still feels a bit “loose”. I’m still avoiding pushing code from the local repository to the shared library; if I change something, I just copy the code to there, then I update the library repository itself.
Note: beware amending a commit on the remote library. The next time you try to update the dependency, it’s likely to get lost, and you’ll have to remove the subtree and add it again.
No comments:
Post a Comment