2012-08-22 38 views
3

我使用的是Windows,混帳bash提示符git的存檔命令到位桶

我試圖使用git的存檔命令到位桶

,我遠程收到錯誤:「混帳上載檔案:歸檔死於錯誤「

任何想法?

git的存檔--remote = SSH://[email protected]/username/reponame.git --format =焦油--output = 「文件.tar」

我已經創建了所有SSH密鑰和公共密鑰等等,甚至測試的ssh -v [email protected],它工作正常

+1

您是否嘗試過使用特定的樹狀結構,如標籤或分支名稱? 'git archive --remote = ssh://[email protected]/username/reponame.git --format = tar --output =「file.tar」master'? – VonC

+0

是的,現在它可以工作。如果我知道提交ID,我是否也知道如何檢索特定修訂版?還有可能僅檢索那些在特定提交中更改或添加的文件。我做了一個git檔案--remote = ssh://[email protected]/username/reponame。git --format = tar --output =「file.tar」1f74388a6faa我收到一個錯誤「no such ref」 – Shanthi

+0

SHA1不起作用,請參閱下面的答案。而git-archive檢索一棵樹,而不是一個三角洲。爲了僅獲得已更改的文件,您必須獲得2棵樹並進行比較。但要獲得兩棵樹,只能指定分支名稱或標籤,而不能使用SHA1。 – VonC

回答

9

沒有precising你不能只是一個存檔樹是你想要得到的,當您使用--remote

git archive --remote=ssh://[email protected]/username/reponame.git --format=tar --output="file.tar" master 

會工作,提到一個分支的名稱。
這也適用於標籤的名稱。

然而,根據this thread,提交ID會工作:

是否有一個原因git-archive需要一個名爲裁判,而不僅僅是一個承諾(或樹)ID?

是的;通常git存儲庫不允許客戶端訪問任意sha1。相反,他們要求所請求的對象可以被ref訪問。

git-archive未正確執行此操作,並且最近更改爲僅允許按名稱引用以及refs的子樹(例如,HEAD:subdir/)。
這意味着我們不允許任意提交或樹sha1,即使它可以從廣告的引用到達。

難以修補git-upload-archive使用ID嗎?
我可以爲ref使用標籤,但在我的情況下會導致幾乎每個提交都是標籤,看起來很浪費。

這樣做的確有點貴,因爲在一般情況下(有人要求樹sha1),我們需要遍歷每個提交的每棵樹,看看它是否可達。

我們可能會實施一組更有限制的規則,允許「<commit>:<subdir>」並檢查<commit>是否可到達。
這將不允許任意樹sha1,但我懷疑它會覆蓋常見的 用例(即,您想要獲取樹,甚至是特定修訂版的子樹)。