我对 git子树系列命令有些陌生,所以可能是我完全误解了它们的工作方式。如果是这样,我事先表示歉意。
简而言之,我希望 git subtree pull 命令可以合并更改,但是似乎失败了。
我整理了一个Windows批处理文件来说明问题(或引起我的困惑)。它可以在Git CMD窗口中运行:
cls
rem Test git subtree
set root=c:\git-test
set librepo=%root%\librepo
set uselibrepo=%root%\uselibrepo
rem Clean-up
cd \
rd /s /q %root%
rem Initialize repos
md %librepo%
cd /d %librepo%
git init
md %uselibrepo%
cd /d %uselibrepo%
git init
rem Add files to librepo
cd /d %librepo%
echo Hi >fileInRoot.txt
md lib
cd lib
echo Mom >fileInLib.txt
cd..
git add fileInRoot.txt
git add lib\fileInLib.txt
git commit -m "Initial files in repo with lib"
rem Add files to uselibrepo
cd /d %uselibrepo%
echo Excellent>file1.txt
git add file1.txt
git commit -m "Initial files in repo that will have lib subtree"
rem Add subtree to uselibrepo
cd /d %librepo%
git subtree push --prefix=lib %uselibrepo% libBranch
cd /d %uselibrepo%
git subtree add --prefix=lib %uselibrepo% libBranch
git branch -D libBranch
rem Add/change files in lib
cd /d %librepo%\lib
echo Dad >fileInLib.txt
echo Adventure >anotherLib.txt
git add anotherLib.txt
git commit -m "Updates to lib in original location"
rem Share changes
cd /d %librepo%
git subtree push --prefix=lib %uselibrepo% libBranch
cd /d %uselibrepo%
git subtree pull --prefix=lib %uselibrepo% libBranch
git branch -D libBranch
rem New file is found in both places
type %librepo%\lib\anotherLib.txt
type %uselibrepo%\lib\anotherLib.txt
rem Changed file is NOT the same in both places
type %librepo%\lib\fileInLib.txt
type %uselibrepo%\lib\fileInLib.txt
该脚本设置了两个存储库。一个仓库中有一个lib文件夹,可通过 git subtree add 与另一个仓库共享。
设置后,原始的lib文件夹中添加了一个文件,而另一个文件已更改。使用 git subtree push 提取更改,然后使用 git subtree pull 合并。
预期结果:两个lib文件夹都相同。
实际结果::两个lib文件夹均已添加文件,但更改的文件未 更新。
每个 git --version ,我使用的是 git 2.21.0.windows.1 。
几天过去了,这里没有任何人发表评论,所以我已经以bug report的身份传递给了git人。