如何将git存储库与另一个存储库的子目录同步

时间:2013-09-26 16:34:15

标签: git git-filter-branch

我正在开发一个包含 src / 目录的大型应用程序,我只想分享这个 src / 目录。

因此,我想定期将此 src / 目录推送到另一个存储库(并保留已制作的标记和分支,并包含对 src / <内的文件所做的更改/ strong>)。

到目前为止,我已经完成了以下工作:

git clone MyBigProject /tmp/foo
cd /tmp/foo

# I want to share the master and 1.0, 1.1, 2.0,... branches
REMOTE_BRANCHES=`git branch -r | tr -d " " | grep "^origin/[0-9]\.[0-9]$"`
for BRANCH in $REMOTE_BRANCHES; do
    # So I need to track them locally in order to rewrite them
    git checkout --track $BRANCH
done

git filter-branch --tree-filter 'rm -rf `ls -1 | grep -v src`' --prune-empty -- --all

git push MySharedRepo --all
git push MySharedRepo --tags

问题是filter-branch会创建新的提交哈希值,因此推送到MySharedRepo会带来很多冲突。这也意味着每次推送共享存储库时它都会破坏所有用户引用。

我想指出MySharedRepo是一个只读存储库。

过去几天我一直在寻找这个问题的正确解决方案,所以如果你能帮助我解决它,请提前感谢!

1 个答案:

答案 0 :(得分:0)

通过filter-branch仅共享子目录是正确的路径。最佳地,如果src目录可以独立存在,则主(父)存储库可以从包含filter-branch存储库作为子模块中受益。这实现了以下目标:

  1. src内容和父项目提供单独的存储库。
  2. 支持控制对src的读取/读取/写入访问作为存储库 (如果在https://github.com等中央存储库上共享)。
  3. 每次提交git filter-branch需要分享
  4. 时,消除重复的src次努力