git init --separate-git-dir 覆盖现有的 .git 文件夹

git init --separate-git-dir overwrites the existing .git folder

我有一个仓库:

mkdir test
cd test
git init
touch hi.txt
git add .
git commit -m 'first test add'
git status

其中我想添加一个单独的 git 存储库来管理不同的工作:

git init --separate-git-dir .git2

运行 这个命令,但是用存储符号链接的文件覆盖 .git

我不希望这种情况发生:(

我希望原来的.gitrepo/folder和.git2和睦相处...

这样我就可以 运行 命令如下:

git --git-dir=.git2 add new_file.txt

谢谢!

--separate-git-dir 选项的目的不是在同一存储库中为您提供多个 .git 目录,而是 .git 目录与你的工作树.

来自documentation

Instead of initializing the repository as a directory to either $GIT_DIR or ./.git/, create a text file there containing the path to the actual repository.

If this is reinitialization, the repository will be moved to the specified path.

例如,这允许您将 .git 目录移动到单独的存储位置(例如,出于 space 或备份原因),同时仍将您的工作树保留在原处。

如果您想将多个独立的存储库(每个都有自己的历史记录)合并为一个,您可能需要查看 submodules

解决了问题:

git --work-tree=. --git-dir=git2 init

而不是使用 --separate-git-dir 标志

每个后续命令现在都需要:

git --work-tree=. --git-dir=git2 status
git --work-tree=. --git-dir=git2 add .
git --work-tree=. --git-dir=git2 commit -m 'yay!'

简奇。但这正是我所需要的...

您使用了错误的标志。 --separate-git-dir 标志用于将您的 .git 文件夹存储到自定义位置,而不是您项目的根目录。