2016-10-05 87 views
11

我正在一些服務器端軟件上進行合併。通過使用git worktree,可以檢出一個給定的分支以進行裸回購,並將另一分支合併到其中。速度非常快,即使是大型存儲庫也是如此。Git - 裸回購不能爲主分支工作樹 - 爲什麼?

唯一的例外似乎是合併到master。當我做git worktree add /tmp/path/to/worktree master我得到一個錯誤:

fatal: 'master' is already checked out at '/path/to/bare/repo'

但是,這顯然是不正確的,git worktree list給出:

/path/to/bare/repo (bare)

...當然,還有在這條道路沒有工作的樹,只您期望的裸回購文件。

更新:我與git維護人員取得了聯繫,他們同意這可能是一個錯誤。我有一個來自他們的初步補丁來測試。此外,我還能夠重現所需的行爲,而無需修補程序。

在這一點上,我不完全確定邊界條件或根本原因是什麼,並且可能會從git中得到修復。

+0

從閱讀文檔看來,您可能需要傳遞'-b'選項來創建分支才能工作。 –

+0

嗯。但是這個回購中有一個現有的主分支。錯誤信息似乎也證實了這一點。 也許從我上面的描述中不清楚,但是這種方法與其他分支一起工作正常(沒有錯誤消息),包括將*從* master合併到另一個分支。 – mtutty

回答

6

原來,這是git中的一個bug,從2.5或更高版本的工作樹實現開始。

裸倉庫仍然有HEAD reflink。無論鏈接指向的是git(直到幷包括2.10)都被認爲是新克隆的默認分支,並且(錯誤地)被視爲處於活動工作樹上。

我從Git維護者那裏收到了一個修補程序來解決這個問題,並且它似乎有效。或者,應該可以在裸回購上使用update-ref從臨時從主回切。

我將測試這兩個選項。

3

我認爲這是不正確的。你可能想要報告給他們。我還沒有找到任何討論,儘管案件似乎很明顯。您可以運行git update-ref --no-deref HEAD 'HEAD^{commit}'作爲解決方法。它分離當前的HEAD,以便主沒有被檢出

相關問題