2013-04-18 40 views
8

有沒有辦法將一個提交推送到遠程git倉庫,而無需先製作該倉庫的本地克隆?如何在遠程回購中更新文件,而無需首先克隆該回購?

我有一個有效的遠程回購URL,我知道文件的路徑,我想要做的就是將更新版本的文件推送到主服務器上。理想情況下,我希望這可以與任何有效的遠程repo URL一起使用,但如果它僅適用於基於https的git URL,它仍然會有幫助。

我猜這是不可能的,因爲它似乎並不可能,甚至檢索單個文件,而無需在一般情況下克隆,根據答案How to "git show" on a remote repo?。但我希望有一個解決方法,使用一些較低級別的git命令。

+1

不要認爲這是可能的,也不應該是真的,爲什麼要編輯文件而沒有整個回購呢? –

+1

如果遠程回購託管在[github](http://github.com),您可以直接在那裏編輯文件。否則我不認爲這是可能的。 –

+1

@MadaraUchiha爲什麼?因爲有時你只需要對一個大規模的回購進行一些小的改動,而且克隆整個事情需要花費很多時間。就我而言,管理應用程序需要更新包含在數百個git repos中的元數據,但不希望僅爲此目的而保留所有這些元數據的本地副本。 – algal

回答

7

不可能。但是由於預期提交只需要將一個提交作爲其父提交,所以可以使用所謂的「淺層克隆」並只提取所需分支的提示提交。這將只從遙控器中獲取最少量的物體。查找--depth命令行選項git clone

+0

有趣的功能!手冊頁說:雖然:你不能克隆或從中獲取,也不能從中推入或插入它。因此,即使您可以使用它創建補丁並單獨發送補丁,它也不會幫助您自動推送更改。 – Shahbaz

+0

@Shahbaz手冊實際上是錯誤的,你可以從它推動就好... – poke

+0

@poke,我沒有嘗試過,但如果您確定,請考慮在手冊頁上提交錯誤報告。 – Shahbaz

3

不,我不認爲這是可能的。您需要克隆整個存儲庫才能正常工作。 Git需要了解所有文件並.git才能正確完成其工作。這就是爲什麼你不能推這樣的任意文件。

1

@algal,對於您的特定用例,您可能會使用子模塊http://git-scm.com/docs/git-submodule。您可以克隆並提交到子模塊,而不用克隆可能包含您提到的「龐大」代碼的「supermodule」。 supermodule可以引用你提到的配置信息的子模塊。

0

是你可以把使用tagging

遵循這個步驟

在新項目的根新版本

  1. git init
  2. git remote add origin [email protected]:yourusername/yourpoject
  3. git tag -a v2.0 -m 'version 2.0'
  4. git add .
  5. git commit -m "New Version 2.0 :rocket:"
  6. git push -u origin v2.0

現在你有一個新的分支稱爲2.0版與您的新項目 和master分支保持不變。 之後,如果您不能在github項目設置中更改默認分支。