簡體   English   中英

git子樹:拆分子項目,處理它,然后合並

[英]git subtree: split sub-project, work on it, and merge back

我試圖從我的“超級項目”中的文件目錄中創建一個“子項目”,以便與其他人合作,但我一直在努力使其在git子樹中工作。 理想情況下,其他人可以處理子項目,然后我從上游更改,並推送我的更新。

這是一個用於此目的的MWE。 我創建了一個“超級項目”,其中包含一個“子項目”,然后將子項目git subtree化到遠程倉庫“子項目”:

$ mkdir subtree-test && cd subtree-test

# create super-project
$ mkdir super-project && git init super-project && cd super-project
$ echo "foobar" >> super.txt
$ git add super.txt && git commit -m "add file"

# create sub-project
$ mkdir sub-project
$ echo "foobar" >> sub-project/sub1.txt
$ git add sub-project/sub1.txt && git commit -m "add file"

# prepare a bare subtree repo named "sub"
$ git init --bare ../sub-project
$ git subtree push --prefix=sub-project/ ../sub-project master

然后將“子項目”克隆到“子實時”,做一些工作,然后向上游推送:

$ cd ../
$ git clone sub-project sub-live
$ cd sub-live
$ echo "foobar" >> sub2.txt
$ git add sub2.txt && git commit -m "add file"
$ git push

然后嘗試合並回超級項目:

$ cd ../super-project
$ git subtree pull --prefix=sub-project/ ../sub-project master

而且有錯誤:

warning: no common commits
remote: Counting objects: 5, done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 5 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (5/5), done.
From ../sub-project
* branch            master     -> FETCH_HEAD
fatal: refusing to merge unrelated histories

我讀過有關git subtree用法的文章。 但是在大多數情況下,子項目稍后會添加到超級項目中。 就我而言,子項目源於超級項目,這可能會造成這些並發症。

我做錯了什么? 我該怎么從這里開始呢?

您可以使用git subtree split --rejoin進行初始拆分,這使得這更容易:

options for 'split'
    --annotate ...        add a prefix to commit message of new commits
    -b, --branch ...      create a new branch from the split subtree
    --ignore-joins        ignore prior --rejoin commits
    --onto ...            try connecting new tree to an existing one
    --rejoin              merge the new branch back into HEAD

但是,關於你的問題:我認為你需要先刪除目錄,然后再使用git subtree add ,例如參見https://www.atlassian.com/blog/git/alternatives-to-git-submodule-git -subtree

git rm -rf sub-project/
git commit -m "Remover subdir"
git subtree add --prefix=sub-project/ ../sub-project master

僅用於將來的合並,您可以使用pull或merge。

暫無
暫無

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

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