假设我有一个本地的git仓库(“A”),里面有很多不想发布的提交记录。
如果我将除了.git目录之外的所有东西都复制到一个新文件夹中(我们称其为“B”),并在那里git init另一个仓库,这样做会不会对第一个命名为“A”的本地仓库造成混乱,并丢失该仓库的提交历史记录?
假设我有一个本地的git仓库(“A”),里面有很多不想发布的提交记录。
如果我将除了.git目录之外的所有东西都复制到一个新文件夹中(我们称其为“B”),并在那里git init另一个仓库,这样做会不会对第一个命名为“A”的本地仓库造成混乱,并丢失该仓库的提交历史记录?
.git
子目录将一个目录变成一个 git
仓库。如果你移除它(或者复制除了 .git
子目录以外的所有内容),那么你就有了一个不是 git
仓库的项目,也没有与任何 git
仓库相关联。git init
将创建一个新的 git
仓库,该仓库与原始仓库 ("A") 或任何其他仓库都没有关联。git init
之后,"B" 仓库是一个不同的项目(具有全新的、空的历史记录),而不是旧的 "A" 仓库,将它们链接起来(即使可能)将生成重复的提交和冲突。(感谢 @NickVolynkin 指出这一点)push
。从父目录开始:
cp -a repo-A repo-B
将创建一个副本仓库,不会对A仓库进行任何修改,除非是atime(取决于您的文件系统),但Git无论如何都不会跟踪它。
两个仓库在功能上完全相同,包括历史记录和未提交的工作。然后,您可以独立地对任一仓库进行任何更改。
如果您使用了--shared
标志进行克隆,或设置了.git/objects/info/alternates
,即使创建了存档副本,您可能仍然在仓库之间共享文件。这不是一般情况,但如果您已经这样做,就必须注意并采取特殊预防措施。买家自负。