2012-06-28 226 views
39

我剛剛偶然發現了一些今天奇怪的東西。我在夏季的工作中問了一位同事,幫助我爲我的代碼建立了一個新的遠程git倉庫,並且對他做了什麼以及我想做什麼感到困惑。我要求他發送他的配置文件,以便能夠看到他的遙控器的路徑,並發現他沒有遙控器。當我問他這一點,他解釋他的工作流程是這樣的:git push和git pull有什麼區別?

  1. 改變某些事情了本地
  2. 提交
  3. 移動到遠程目錄
  4. 混帳拉C:\和localdir

所以不是推送到遠程他不斷從他的本地回購拉到我們的服務器上。向後工作的種類。當我面對他時,他問我有什麼不同,我不能真正回答他,但我認爲有一些事情是正確的?

所以我對你們所有人的問題是:推動遠程和從遠程拉動的區別是什麼?

+4

@Downvoters:請記住讓人知道爲什麼,這樣可以改善問題。 – Zeemee

+2

傾向於downvote,因爲問題**聽起來可笑,但實際上不是!現在改用upvoting。 – eckes

+2

@穆爾穆特。哈,要知道我做錯了,如果有人只是踢我的臉。 =) – Qw4z1

回答

10

推送到遠程:發送一些提交你必須另一個git回購。 git repo被認爲是「遠程」,但它可以是硬盤驅動器上另一個文件夾中的回購。 從遠程拉:從遠程回購得到一些提交併在當前的HEAD合併它們(您當前的回購結算)

你的同事可能會利用拉而不是推,因爲你的資料庫可能沒有用(沒有運行git守護進程,或gitweb或ssh服務器),但他的計算機可用。因爲它是一個服務器,他可能不想公開一個可能成爲攻擊媒介的git守護進程/服務。

但是,如果你的資料​​庫中的共享/可用,他只是已經能夠做到:

  1. 改變一些本地
  2. 提交
  3. 推到你的資料庫
+1

我認爲這是這種情況,因爲我也遇到了推送到服務器的一些問題。 – Qw4z1

+2

然後就是這樣。正如[eckes](http://stackoverflow.com/a/11240793)告訴的那樣,服務器可能已經有一個已經檢出的目錄,它反映了master作爲生產版本。所以您將無法從本地分支推送到遠程主分支,因爲它已被檢出以滿足生產需求。 – Dolanor

0

沒有,回購是彼此的副本,拉和推只是方向流。與同事的方法不同的是,他添加了第4個不需要的命令。

1

是的,它正在倒退。

原理工作流程是:

  1. 改變一些本地
  2. 提交
  3. 推到遠程目錄

一個用例(另一個是explained by Dolanor)不推到遠程是一工作副本在遠程機器上檢出(即它不是裸露的回購)。當他想推送一個在遠程盒子上籤出的分支(例如master:master)時,這將不會成功,因爲禁止推送簽出分支。

在我看來,這是跳轉到遠程計算機並從本地計算機上拔出而不是從本地計算機上拔出的唯一用例。

+1

我解釋了repo不可用的其他情況(沒有git守護進程等)。我忘記了已經檢出的存儲庫。所以似乎有兩種情況可以做這種工作流程 – Dolanor

+0

@Dolanor:你是對的!編輯答案。 – eckes

+0

所以基本上推拉只是向相反的方向扔東西? – Qw4z1

13

在我您可以讓用戶將他們的提交推送到被認爲是「主」的存儲庫,或者讓他們向有權修改所述「主」的單個用戶發送請求。例如,Github不會讓非貢獻者推送到存儲庫,但會允許他們發送pull請求,以便貢獻者可以整合他們的更改。

+2

GitHub拉請求示例使我對它更加清楚。謝謝! – Qw4z1

+0

這個答案用簡單的術語來解釋它,而不是爲新手「理解」引入更多的新術語。 – NavkarJ

相關問題