2010-08-19 22 views
1

想到我終於想到了git,我現在發現自己對於我看到的git行爲感到超級困惑 - 無論何時,只要將所做的更改和提交到我的本地計算機直至我的原始git存儲庫,這些更改立即上演在原始服務器上撤消。咦??!?爲什麼我的git origin想要刪除所有推送的更改?

我有一臺機器(機器A),上面有一個項目的git倉庫;該機器正在運行SSH服務器,並且我配置了一個帳戶,以便我可以遠程連接並克隆git倉庫。然後我用機器B的git克隆回購:

git clone ssh://[email protected]/path/to/repo

沒有問題。我所做的更改對機器B上的項目,並承諾這些變化對B的git倉庫。然後,我推的變化又回到了原點庫機器A:

git push master origin

,並且工作得很好;在機器的B,git remote show origin輸出顯示產地是最新的:

$ git remote show origin 
* remote origin 
    Fetch URL: ssh://[email protected]/path/to/repo 
    Push URL: ssh://[email protected]/path/to/repo 
    HEAD branch: master 
    Remote branch: 
    master tracked 
    Local ref configured for 'git push': 
    master pushes to master (up to date) 

但是,當我去到機器A和做git status,我看到,我只是把所有的變化正在上演的是百廢待興!

$ git status 
# On branch master 
# Changes to be committed: 
# (use "git reset HEAD <file>..." to unstage) 
# 
#  modified: build-fatjar.xml 
#  deleted: src/monitor/config/client-lm-prod.xml 
#  modified: src/monitor/config/quartz-baseconfig.xml 
#  modified: src/monitor/service/task/BaseTask.java 
#  new file: src/monitor/service/task/CheckForCorrections.java 
#  deleted: src/monitor/service/task/CheckForDuplicates.java 
#  deleted: src/monitor/service/task/ProcessCorrections.java 
#  renamed: src/monitor/test/CheckForDuplicatesTest.java -> src/monitor/test/CheckForCorrectionsTest.java 
#  deleted: src/monitor/test/ProcessCorrectionsTest.java 
#  modified: src/monitor/test/TaskTestCase.java 

獲得原點存儲庫(機A),以相同的狀態機器B中的一個是git reset HEAD重置所有這些變化將要提交的,然後git rm他們每個人的唯一方法;否則,機器A上的下一個git commit將撤消我剛剛從機器B推送的所有內容。

我已經閱讀了所有參考資料,可以獲得我的幫助,但沒有提及此行爲;同樣,我也無法在網上找到它的參考。有任何想法嗎?

+1

好吧,在幾個SO問題中經常提到它。見http://stackoverflow.com/questions/3523008/how-do-i-push-to-the-current-git-branch-on-remote-and-have-changes-reflected-immediately和http:// toroid .org/ams/git-website-howto – MvanGeest 2010-08-19 18:02:55

回答

5

聽起來就像是推到一個非裸回購(也就是說,一個回購,有文件檢出在磁盤上)。 Git會更新回購協議,但不是已簽出的文件,因此看起來好像有更改正在等待上演。解決方法是做兩件事情之一:

  1. 要麼推入裸露的回購協議(原產地),然後使用後收到鉤檢查出的文件(可能使用git archive)到另一個地方的服務器上,或
  2. 使用post-receive鉤子運行git checkout或某些更新磁盤上的文件。

您可以在此Stack Overflow question或此how-to article中閱讀更多。

+0

太棒了 - 是的,就是這樣。我在機器A上建立了一個裸機,而不是一個「常規」機器,現在一切都很順利。 – delfuego 2010-08-19 18:51:43

0

是@MvanGeest是對的,你正在推動一個非裸回購。如果您打算使用回購作爲'祝福回購',即以與在Subversion中使用主存儲庫相同的方式,那麼您需要創建一個裸回購並推送給它。如果你現在有這種情況,你必須匆匆進入a並從b拉出來。

相關問題