1

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

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

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

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是一个只读存储库。

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

4

1 回答 1

0

通过 filter-branch 仅共享子目录是正确的路径。理想情况下,如果src目录可以独立存在,则主(父)存储库可能会受益于将filter-branch存储库包含为子模块。这实现了以下目标:

  1. src为内容和父项目提供单独的存储库。
  2. 支持对src作为存储库的读/读+写访问的控制(如果在https://github.com等中央存储库上共享)。
  3. 消除git filter-branch每次提交src需求共享时的重复工作
于 2013-09-26T17:29:39.733 回答