2011-11-11 116 views
0

我真正廣泛使用的唯一版本控制軟件是Subversion。我喜歡git的功能集和性能,所以我選擇將它用於未來項目的版本控制。Git Push不更新源

我正在使用Eclipse的eGit插件。我的問題是,當我推上游(報告成功)時,源代碼中的源代碼不會更新。如果我查看版本歷史,我可以看到推送提交。

如果這是Subversion,我會做一個'更新',並且我的更改會在原點同步。這顯然有點不同,因爲我不再處理單一的集中式存儲庫。

有沒有什麼我做錯了或根本沒有做我可以做的來更新源的源?如果答案可以適用於使用eGit界面而不是git命令行實用程序,那將是特別有用的。

謝謝!

回答

1

「源代碼中的源代碼」是否表示源代碼中的工作樹?您需要在原始機器上分支git checkout以便將工作樹更新爲最新版本。

+0

謝謝,這正是我所期待的。我想在eGit中沒有'提交' - 但你必須做一個'硬重置'。 – kwikness

3

你確定你已經添加並承諾任何東西到你的本地回購?

在命令行本想:

$ git add . 
$ git commit -m "Some comments about what I've done" 

這兩種操作是必要的。 add將它添加到您的索引/分段區域。 commit實際上創建了一個新的提交對象。

一種方法在命令行來檢查,這將是一次:

$ git status 

如果顯示沒有被跟蹤和/或沒有被添加到臨時區域的文件的AA串。這是你的問題。

如果它顯示所有內容都是最新且未經編輯的,那麼我會檢查以確保HEAD指向的提交與您的遠程設備不匹配。

以下一種能爲你做的:

$ git log 
$ gitk --all 

如果一切是理所應當的,這意味着你的地方是所有的承諾,它有提交遠程沒有,那麼我說罪魁禍首是EGit,我不是專家。

不是我也是git專家。 :)


如果你的目的是爲了有一個偏僻的地方,你push從本地,並讓它更新文件系統的最新更改,那麼你找錯了樹。 Remotes should always be bare repos, unless you really know what you're doing

可能會在遠程回購上寫一個hook,它會自動檢出push ed日期,但同樣不鼓勵。一個更成功的解決方案是簡單地使用git checkout-index...,然後將scp/rsync/ftp文件轉移到其他地方的平面商店。你甚至可以編寫一個鉤子來執行此操作,當你在某個地方進行推送或者直接進行提交時。

+0

感謝您的建議蒂姆。我想我確實在吠叫錯誤的樹。 我只是習慣於在顛覆模型下工作,在這種模型中,我和其他1-2位開發人員總是在主線上工作,並在發生提交衝突時合併衝突。 git的不同之處在於,每個開發人員在處理相同的源文件時都被迫創建一個新的分支?看起來如果不是這樣,那麼舊的源文件會被最後一個壓入存儲庫的文件覆蓋。 – kwikness

+0

我不知道git提供了編寫鉤子的方法。我肯定會研究運行一個rsync提交到主存儲庫。 – kwikness

+0

我不確定我完全按照你的過程。你的意思是說你和其他一些開發人員同時在同一個物理目錄中工作?如果情況並非如此,那麼不,git不會強制您每次創建新分支時,都需要在其他人的同一個文件上工作。每個人都可以處理任何你想要的文件,但是當你希望別人改變設置時,你需要合併它.Git對於合併非常聰明,但是可能會出現衝突。在那種情況下,你就像你已經在做的那樣合併它們。也許我可以更清楚地澄清一下你的結局。 :) –