我有两个存储库,A和B.A的文件结构是:
/脚本 /本地数据 等
B的文件结构是相同的。区别在于B应该是A的超集。 /脚本 来自A +的所有脚本/ * 特定于项目B的脚本 (即A中的文件与B特定脚本位于同一目录级别)
A是github上的开源。 B在服务器上是专有的。每当更新A时,B中的A文件也应该更新。
如何设置?
答案 0 :(得分:1)
如果您目前有1个回购,则应将其拆分为不同的回购
使用split
命令
subtree split
强> <强>
git subtree
强>git-subtree
-Merge
将子树或split
存储在子树中
git subtree split -P <name-of-folder> -b <name-of-new-branch>
现在为您的存储库创建子模块或子树。
首先让我们解释一下子树和子模块之间的主要区别:
它们都用于在现有仓库内部拥有另一个仓库。主要区别在于git submodule
是独立的自包含存储库,而subtree
将日期存储在父(原始)存储库中。
Now let's dig in and explain in more details:
强> 我可以遵循更简单的例子吗?
Submodule
是独立 git项目,因此代码将被检出新文件夹在根文件夹下,它不是主分支的一部分。
您的根文件夹将包含一个子模块文件,您必须在每个克隆文件上init && update
。
# Add the desired submodule to your code base
git submodule add <url>
您必须运行两个命令:
git submodule init
初始化本地配置文件,
git submodule update
从该项目中获取所有数据,并检查超级项目中列出的相应提交:
所以完整的脚本是这样的:
git submodule add <url>
git submodule init
git submodule update
您只需要在根文件夹中,然后添加子模块文件夹。
git submodule add <url>
现在,当你克隆项目时,你只需要初始化并更新子模块
git submodule init
git submodule update
Git 1.8.2提供了一个新选项--remote
git submodule update --remote --merge
将从每个子模块的上游获取最新的更改,将它们合并,并检查子模块的最新版本。
git subtree
强> Git子树允许您将任何存储库作为另一个存储库的子目录插入
与submodule
非常相似,但主要区别在于管理代码的位置。在子模块中,内容放在一个单独的仓库中,并在那里进行管理,允许您将其克隆到许多其他仓库。
subtree
正在将内容作为根项目的一部分进行管理,而不是在单独的项目中。
不是写下如何设置它并理解如何使用它,你可以简单地阅读这篇能够解释它的优秀文章。
https://developer.atlassian.com/blog/2015/05/the-power-of-git-subtree/