假设我有两个回购,回购A 和回购B ,其中包含一个代码类似于回购A中代码的文件夹(并不重要这实际上已经发生了,但好吧,我们假设我刚从A)复制了内容。
现在我想要关注:
所以,基本上,我正在寻找最便宜的方式来进行反向疏散检查。
答案 0 :(得分:2)
一种方法是设置第三个存储库,其中包含两个项目共用的代码,然后将该存储库用作存储库A和B中的子模块。
但是,如果我理解你的问题,整个A存储库就是“常见”代码。在这种情况下,在第3个存储库中没有必要,你可以简单地在A中添加A作为子模块。
答案 1 :(得分:2)
git-subtree 1试图解决的问题似乎正是如此。
cd repoB
git subtree pull -P folder {repoA URL} {repoA branch}
... edit test commit...
git subtree push -P folder {repoA URL} {repoA branch}
答案 2 :(得分:2)
您可以添加参考,然后在回购中发布任何内容。因此,要维护一个跟踪主分支子文件夹的单独分支,请将其添加到您的提交仪式中:
# in your commit ritual (no need to be mainbranch-specific,
# this will detect changes and add the tracking commits only as necessary),
if [ `git rev-parse mainbranch:path/to/subfolder` \
!= `git rev-parse subfolderbranch:path/to/subfolder` ]; then
git commit-tree -p subfolderbranch -p mainbranch \
mainbranch:path/to/subfolder <<<"tracking mainbranch subfolder" \
| xargs git update-ref -m"tracking mainbranch subfolder" refs/heads/subfolderbranch
fi
答案 3 :(得分:1)
克隆repoA以创建新的repoB。然后,为除子文件夹之外的所有内容设置假定未更改位:
git update-index --assume-unchanged *
git update-index --no-assume-unchanged <subdirectory>
注意:文件/目录参数不得以.
或/
之后,您可以删除除子文件夹以外的所有内容。由于假设不变位,git不会注意到这一点。现在工作,因为这将是一个普通的存储库。您可以将已更改的文件从旧repoB复制到此文件。
请注意,推送和拉取可能会再次创建不在子文件夹中的文件。为了防止这种情况,您可以创建一个钩子来删除除子目录之外的所有内容。