====== Keep Data in .git/refs ====== Git keeps references to heads (branches) and tags in .git/refs. This is very convenient because you can obtain the SHA1 ID of any tag just by doing cat .git/refs/tags/. But this mechanism only works if you do not run git gc. The garbage collector packs tags by default, that means the files from .git/refs/tags will be removed and their SHA1 IDs will be stored in file .git/packed-refs instead. To prevent this you can use the following in your .git/config: [gc] packrefs = 0 See ''man git-pack-refs'' for more details. ====== Avoiding Tag Collisions ====== If you fetch tags from multiple remote repositories, it may happen that they will generate conflicts because all tags are stored in .git/refs/tags directory. This will happen, for example, if you fetch objects from both the sip-router git repository and also the repository at http://git.sip-router.org/ser. The reason is that both of them originate from a single cvs repository and thus they contain tags with identical names. To avoid this situation you can do the following in your .git/config: [remote "sr"] .... fetch = refs/tags/*:refs/tags/sr/* tagopt = --no-tags [remote "cvs"] .... fetch = refs/tags/*:refs/tags/cvs/* tagopt = --no-tags The configuration above will fetch all tags from both repositories explicitly and will store them in subdirectories under .git/refs/tags to avoid conflicts in file names. Because you download tags explicitly you can tell git-fetch not to download any tags using the tagopt option. ====== GIT commands for merging of modules ====== This will show you how the git commands to merge modules, e.g. ser's avpops module is removed and K's avpops module is used as comon module. # we start in the local master branch git checkout master # create a new local branch called "darilion/avpops" based on # the remote master branch, and checkout into the newly created branch git checkout -b darilion/avpops origin/master # remove the old ser module git rm -r modules_s/avpops/ # move the Kamailio module into the common modules directory git mv modules_k/avpops/ modules/ # do whatever is need, eg. modify the code, ... # check if sip-router builds and the code is working as expected # check the status (modified files) git status # add all modifications for the next commit git add . # commit the changes (which were added in the previous step) # (this will commit into the local working branch, in this case darilion/avpops) # make sure to add a commit message according to these rules: # http://sip-router.org/wiki/devel/git-commit-guidelines git commit # verify the commit git log -1 # prepare for push into the remote master branch: make sure # that our local branch is up2date with commits added to # remote main branch git fetch origin git rebase origin/master # push our changes from the local "darilion/avpops" branch # into the remote master branch git push origin darilion/avpops:master # cleanup: change into another local branch and delete the local avpops branch git checkout master git pull --rebase origin master # fetch previously commited commit git branch -d darilion/avpops