簡體   English   中英

有沒有一種方法可以推送到遠程Git存儲庫而無需獲取其對象?

[英]Is there a way to push to a remote Git repository without having to fetch its objects?

假設我在服務器中存儲了一個大型的Git存儲庫,以便多個人可以使用它。

我希望能夠使用此存儲庫中的單個文件,即讀取,編輯或插入新文件,而不必獲取其所有內容,因為它是一個相當大的存儲庫。

我知道我可以通過使用archive命令並解壓縮結果來從特定的分支/提交中獲取文件,如下所示:

git archive --remote=git:<URL> <tree-ish> <file_name> | tar -x

那反過來呢? 有沒有一種方法可以編輯,插入或刪除給定分支中的新文件,甚至可以將新分支推送到遠程Git存儲庫而無需下載其所有內容?

據我所知,沒有辦法做你想做的事。 當您嘗試將一些提交推送到遠程存儲庫時,Git將檢測您當前的分支是否在其遠程分支之后,在這種情況下,它將提示錯誤:

! [rejected]        master -> master (non-fast-forward)

考慮以下情形作為示例:

A - B - C - D (remote master)
     \
      - E     (local master)

如果您在這種情況下嘗試推動,Git將阻止您並建議:

由於當前分支的尖端位於其遠程對應的后面,因此更新被拒絕。 合並遠程更改(例如“ git pull”),然后再次推送。

也就是說,您必須獲取遠程分支,合並更改,然后推送合並結果。 Git阻止您推送可能與遠程分支沖突的更改,並且要求您在推送之前本地合並更改(並可能解決沖突)。

附帶說明一下,您可以使用git push --force Git中的非快進更改(即,避免獲取遠程)。 應盡可能避免強行推動,因為這樣做可能會帶來一些不愉快的后果,因為使某些人可能已經做出的承諾無法實現。 在以前的場景中,強制推送將導致:

A - B - E (remote/local master)

如您所見,這會對將遙控器拉到先前狀態的人們造成一些麻煩。 對於后果的詳盡的解釋git push --force看到這個堆棧溢出問題。

您還可以在Git中執行的操作是獲取遠程文件並僅簽出一些文件。 您可以使用以下方法實現此目的:

git fetch
git checkout FETCH_HEAD -- <file-path>

但是,這仍然不能解決您的問題,因為它仍然會獲取遠程信息,並且不允許您在不合並的情況下進行推送。

暫無
暫無

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

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