如何创建包含来自另一个存储库的文件的git存储库?

时间:2016-04-24 22:23:51

标签: git github

我有两个存储库,A和B.A的文件结构是:

/脚本 /本地数据 等

B的文件结构是相同的。区别在于B应该是A的超集。 /脚本    来自A +的所有脚本/ *    特定于项目B的脚本 (即A中的文件与B特定脚本位于同一目录级别)

A是github上的开源。 B在服务器上是专有的。每当更新A时,B中的A文件也应该更新。

如何设置?

1 个答案:

答案 0 :(得分:1)

如果您目前有1个回购,则应将其拆分为不同的回购 使用split命令

subtree split

  

<强> git subtree    git-subtree - Merge 将子树或 split 存储在子树中

git subtree split -P <name-of-folder> -b <name-of-new-branch>

enter image description here

现在为您的存储库创建子模块或子树。

首先让我们解释一下子树和子模块之间的主要区别:

它们都用于在现有仓库内部拥有另一个仓库。主要区别在于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

将从每个子模块的上游获取最新的更改,将它们合并,并检查子模块的最新版本。

enter image description here

git subtree

Git子树允许您将任何存储库作为另一个存储库的子目录插入

submodule非常相似,但主要区别在于管理代码的位置。在子模块中,内容放在一个单独的仓库中,并在那里进行管理,允许您将其克隆到许多其他仓库。

subtree 正在将内容作为根项目的一部分进行管理,而不是在单独的项目中。

不是写下如何设置它并理解如何使用它,你可以简单地阅读这篇能够解释它的优秀文章。

https://developer.atlassian.com/blog/2015/05/the-power-of-git-subtree/