git subtree命令在Windows中是否损坏?

时间:2019-05-20 17:14:57

标签: git git-subtree

我对 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人。

0 个答案:

没有答案