簡體   English   中英

如何創建包含來自另一個存儲庫的文件的 git 存儲庫?

[英]How can I create a git repository that contains files from another repository?

我有兩個存儲庫,A 和 B。A 的文件結構是:

/scripts /local-data 等

B的文件結構是一樣的。 區別在於 B 應該是 A 的超集。 /scripts all scripts/* from A + 特定於項目 B 的腳本(即來自 A 的文件與特定於 B 的腳本在同一目錄級別)

A是github上的開源。 B 在服務器上是專有的。 每當 A 更新時,B 中的 A 文件也應更新。

我該如何設置?

如果您目前有 1 個回購,您應該將其拆分為不同的回購。
使用split命令


subtree split

git subtree git-subtree - 將子git-subtree Merge在一起或split存儲庫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/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM