我们一直试图让git-subtree处理一个项目(使用git版本1.7.9.4)并且遇到了一些复杂问题.几个月前,其他人之前使用此命令添加了子树:
git subtree add --prefix=foo git@example.com:foo.git master
Run Code Online (Sandbox Code Playgroud)
现在已经有了实质性的变化foo,我们想要合并这些变化,最好将它们压缩.自导入文件以来,没有任何文件被修改过.
我已经尝试了三件事来尝试合并更改.
第一:
git subtree pull --squash -P foo git@example.com:foo.git master
Run Code Online (Sandbox Code Playgroud)
抛出异常: Can't squash-merge: 'foo' was never added.
第二:
git subtree pull -P foo git@example.com:foo.git master
Run Code Online (Sandbox Code Playgroud)
这有点工作(但有一些问题,但是存在拉入所有提交的问题,并且与已修改的文件有冲突.
最后,我尝试了这个:
git pull --squash -s subtree git@example.com:foo.git master
Run Code Online (Sandbox Code Playgroud)
这给了我想要的结果,输出Automatic merge went well; stopped before committing as requested和所有文件显示为已修改(具有正确的内容).
理想情况下,我想继续使用第一个git-subtree版本并获得接近上一版本的输出.如果我们必须始终使用最后一个版本,我们会,但我有点困惑为什么最后一个不产生合并冲突,而中间版本.
任何帮助表示赞赏.
我有一个远程存储库,我们称之为subrepo。我想将其作为子树包含在本地存储库中,我们将其称为mainrepo。我将把subrepo放在路径“subrepofold/”下。
我像往常一样添加了遥控器:
git remote add subrepo git@remote.subrepo.git
Run Code Online (Sandbox Code Playgroud)
在mainrepo上我只有一个分支(master)。我添加并承诺了所有:
git add --all
git commit -m "message"
git status
Run Code Online (Sandbox Code Playgroud)
在分支 master 上没有任何可提交的内容,工作目录干净
git diff-index HEAD --exit-code --quiet
Run Code Online (Sandbox Code Playgroud)
不给我输出。跑步:
git subtree pull --prefix="subrepofold" subrepo master --squash
Run Code Online (Sandbox Code Playgroud)
我收到以下消息:
工作树有修改。无法添加。
我知道这似乎正是此处描述的问题,但似乎没有一个回复能够解决该问题。