我有一个回购包含"外部/"中的两个子树。文件夹中。
当我克隆repo时,它会下载所有文件,包括我之前在git subtree命令之后推送的代码。
现在,如果我想在另一台机器上克隆该repo并重新创建子树结构,那么git subtree add命令会失败,因为我想放置子树的文件夹已经包含了文件夹和文件。
这些是我跑的命令:
> git clone https://URL/<main>
> git remote add <component> https://URL/<component>
> cd <main>
> git subtree add --prefix external/<component> <component> master
ERROR: prefix 'external/<component>' already exists.
如何解决这个问题?或者,是否有更好的方法可以为新的克隆操作重新创建子树结构?
答案 0 :(得分:2)
Git子树的要点是,您不需要在其他位置或另一台计算机上“重新创建”任何东西。当您clone
存储库时,它已经通过常规提交将子树作为普通文件包含了!
如果您只想“刷新”或“更新”子树的内容,请尝试pull
。
git subtree pull --prefix external/<component> <component> master
如果出于某种原因(请您澄清)确实要重新开始,则需要删除子目录,然后重新添加子树。
git rm -fr external/<component>
git commit -m "Removing old subtree"
git subtree add --prefix external/<component> <component> master
答案 1 :(得分:0)
您收到的错误是因为substree
已经存在:
ERROR: prefix 'external/<component>' already exists.
这是因为克隆主仓库时,您还从subtree
收到了代码。 将 Subtree 添加到存储库中时,您会将代码从外部branch / commit-hash提交到源存储库中;您是将源提交到您的存储库,而不是链接到外部存储库。如果/当您想将代码库从 Subtree 的源存储库插入到较新的提交时,可以执行以下命令:
git subtree pull --prefix external/<component> <component> <branch>
该命令将从指定的存储库和分支中提取HEAD
,并将代码放在/external/<comonent>
路径中现有代码的上方。执行此subtree
命令后,您仍然需要执行git commit
来更新代码。
关于Git的主要提示:子树与 Submodule 的不同之处在于 Submodule 创建了参考/源仓库中的快捷方式/链接到另一个(外部)仓库。使用 Submodule 时,克隆存储库的开发人员还必须具有凭据/对submodule-repo的访问权限,才能将链接的代码拉入要克隆的存储库中。 子树是对根存储库的代码提交。因此,如果您有权访问要克隆的存储库,则无需访问子树中引用的外部存储库。