我正在尝试实现一个描述为&#34的用例;维护一个带有上游repo定制的分支"在此页面中:https://gist.github.com/rvl/c3f156e117e22a25f242
简而言之,我想将我的代码推送到3个不同的位置 - 一个主位置,以及两个删节版本。我将仅对 master 进行修改,然后合并到分支中。我试图通过具有不同远程URL的3个不同分支来做到这一点,除了我想隐藏分支1和1的一些文件。 2:
master - >内部回购
分支1 - >远程#1(不包括文件A)
分支2 - >远程#2(不包括文件B)
我已经设置了遥控器。我知道如何分支 master 并将其远程设置为其他东西。我担心的是从每个分支的历史记录中删除完全的单个文件。我之前使用过 git filter-branch 但有一些顾虑:
我最终会从每个分支中删除文件A吗?是否可以仅从分支1中删除文件A而从分支2中删除文件B的方式是不可能从历史记录中删除它?
将 master 合并到每个分支时会发生什么?它会拉文件A和B吗?是否可以为每个分支设置.gitignore?
有没有更好的方法来实现我想要做的事情?单独的文件A和B的回购?
答案 0 :(得分:0)
对于你的问题:
详细说明如下步骤:
删除fileA
中的branch1
:
首先,按branch1
获取git log branch1 --oneline
的第一次提交。它将在branch1上列出提交,如下所示:
commitN message N
…
commit2 mesaage2
commit1 message1
底部branch1
的第一次提交和branch1
的最新提交位于顶部。因此,您需要获取commit1
的提交ID。
然后,通过
删除fileA
中的branch1
git filter-branch --index-filter 'git rm -r --cached --ignore-unmatch fileA' --prune-empty -f -- commit1..branch1
现在fileA
完全删除branch1
。
删除fileB
中的branch2
(使用相同的方法):
首先,按commitb1
获取branch2
的第一次提交(假设为git log branch2 --oneline
)。
然后,删除branch2中的fileB
git filter-branch --index-filter 'git rm -r --cached --ignore-unmatch fileB' --prune-empty -f -- commitb1..branch2
将master
分别合并到branch1
和branch2
时,fileA
和fileB
将会被单独添加。因此,您应该在合并前分别为.gitignore
和branch1
添加branch2
个文件:
git checkout branch1
touch .gitignore
echo fileA >> .gitignore
git add .gitignore
git commit -m 'add .gitignore for branch1'
git checkout branch2
touch .gitignore
echo fileB >> .gitignore
git add .gitignore
git commit -m 'add .gitignore for branch2'
现在您可以将master
合并到branch1
和branch2
,而fileA
和fileB
将不会添加到branch1
和{ {1}}分开。
此外,在单独的回购中管理branch2
和fileA
是不必要的。以下方式可以更好地达到要求。