2012-11-07 36 views
0

最後拉,改變了遠程服務器上我們正在試圖找出是否有意義,從我們以前的版本控制系統遷移到Git的文件只是一個獨特的名單。 我們正在努力解決的一個問題是,如何確定自上次拉取後所有提交中的文件被其他人更改過。 特別是,如果多個提交中相同的文件已被更改,我們只想在列表中看到該文件一次。 從我已閱讀,看來我必須真正拉遠程倉庫之前,我可以檢查,但即使是這樣,似乎沒有成爲一個(簡單嗎?)的方式只是讓已經改變了所有的文件名列表。 我們混帳的瞭解還不是很深呢,但做一個獲取關注的是,一些非常大的文件(圖片,AIFF等)可能會被推遲,沒有人希望有獲取一切只爲了找出有改變了嗎? 我已經閱讀了一些其他Q/A在stackoverflow中,但雖然我已經看到類似的問題,我還沒有看到任何似乎可行的答案。 我們一直在嘗試幾種GUI工具來讓生活變得更輕鬆(Tower和SmartGit),但他們似乎都無法做到這一點。我怎樣才能得到,因爲我使用Git

+0

你有到中央存儲庫訪問什麼?您可能能夠在獲取之前在遠程存儲庫上運行diff。爲了最佳使用,git依靠快速獲取。在源代碼庫中存儲大量的二進制資源可能會有更好的解決方案。 –

+0

我可以完全訪問中央存儲庫---我們只是在一臺linux服務器上創建了一個repo,我們都可以通過ssh直接訪問它。你會在中央存儲庫上做什麼?這個想法應該是查看遠程更改與每個用戶系統上的更改。但是,我認爲你可能是對的,沒有體面的方式來做這個沒有獲取。 – David

回答

1

的方式做節目哪些文件當前和以前的主人之間的變化:

git fetch 
git diff --stat master origin/master 

第一個命令檢索最新的更新不改變你的樹。第二個輸出已更改文件的列表(以及插入/刪除統計信息) - 如果您輸入了git pull,則會提交所有提交的提交。之後,您可以運行git merge origin/master將您的更改與上游合併進行合併。 (如果有任何一個在此期間被推這相當於一個git pull,除了拉可以獲得從服務器新變化。)

不幸的是,Git並不使它明顯如何diff的沒有拉本地更新。

+0

但是@David想要在知道差異結果之前避免抓取。 –

+0

@CharlesBailey我懷疑OP在更新上游之前更加擔心上游的變化。基於'git fetch'的工作流程,在初學者的課程中經常被忽略,可以避免這個問題。 – user4815162342

+0

他特別聲明,他關心的是抓取和抓取的大小。 –

0

嘗試:

git log --stat 

應打印出當前簽出庫的詳細日誌。

不知道git會做你想做的,而不檢查出當地第一。

+0

'git log --stat'未能滿足要求(用粗體字指定),只有在多次提交中更改文件時才列出。 – user4815162342

+0

更重要的是,這顯示了我已經提交的內容,它沒有顯示自上次執行pull操作後遠程存儲庫中的文件已更改。 – David

1

隨着通過SSH,你可以從一個本地克隆運行像這樣的倉庫直接訪問。

ssh githost "git --git-dir=/data/repo.git diff --name-only\ 
      $(git rev-parse origin/master) master" 

你可能想把它放在腳本或別名中。請注意,$(git rev-parse origin/master)在克隆中本地運行,以檢索克隆的遠程跟蹤分支的標識。

+0

這給了我有意義的錯誤,如 錯誤:無法訪問「add7b64b5545e06a6cbc2445474e1cb5c2453189」 – David

+0

@大衛:如果你只是做類似'SSH githost「混帳--git-DIR會發生什麼= /數據/ repo.git show' –

+0

優秀的答案! – user4815162342