2011-11-07 39 views
1

我有一個關於附件的問題。我們的項目設置如下:Mercurial附件

+ projectA 
    + some files 
    + dependencyA 
     + some files 

dependencyA是子庫。它的建立是這樣的:

  1. CD了projectA
  2. 的mkdir dependencyA
  3. CD dependencyA
  4. 汞的init
  5. 汞柱拉的ssh:// @汞somerandomiphere/dependencyA
  6. CD ..
  7. echo dependencyA = ssh:// hg @ somerandomiphere/dependencyA> .hgsub
  8. hg add
  9. 汞提交
  10. HG推

如果我更改了suprepository,然後提交,並從主項目推動他們。自從它遞歸以來,它們都會被推送到服務器。現在我的同事想要從服務器上獲取更改。但由於主項目沒有改變,它不會工作。但是,如果我在主項目中更改某些內容並將其推送到服務器。在hg pull他會得到最新的變更集,如果他做了hg update那麼它會更新子庫。這是預期的行爲。

現在我的問題是,如果有一種方法來改變,但只有 subrepository沒有做一個新的克隆它或什麼是最好的辦法做到這一點。

回答

0

上面提出的建議是像我認爲的那樣工作的。真正的問題是我創建子庫的方式。

相反的:

  1. CD了projectA
  2. 的mkdir
  3. dependencyA
  4. CD dependencyA
  5. 汞的init
  6. 汞柱拉的ssh:// @汞somerandomiphere/dependencyA

這本來是一個簡單的:

  1. 汞柱克隆的ssh:// @汞somerandomiphere/dependencyA dependencyA

我們知道.hgsusbtate將鎖定在特定的修訂subrepo提交後。這是發生了什麼,但(!)在subrepository做hg pull一個錯誤

paths cannot contain dot file components 

因此,這意味着我的subrepo結束了被鎖在修改它之後更新的提交和它可以從它的存儲庫不拉變化由於上面顯示的錯誤。爲什麼這發生在這accepted answer解釋得很好。

解決方案:

克隆是去

+0

這只是因爲hgrc沒有得到一個默認的服務器路徑集。你大概可以解決這個問題,一切都會很開心。 –

+0

是的,這是另一種方式 – realshadow

2

Subrepository in Mercurial wiki, p. 2.5 "Pull"

'拉' 的命令是默認不是遞歸。這是因爲 在請求更新到 特定變更集之後,Mercurial將不知道需要哪個子變量。該更新將根據需求提取所請求的 子庫和變更集。要獲得 一步的提取和更新,請使用'pull --update'。

注意,這完全匹配「拉」是如何工作的,而不 subrepositories,考慮到subrepositories生活在工作 目錄:

  • 「汞拉」給你上游的變更,但不影響你的工作目錄。
  • 「汞柱更新」更新你的工作目錄中的內容(無論是在頂部回購和所有subrepos)

,如果您有任何 subrepositories這可能是一個好主意,總是拉--update 。這通常會確保更新不會錯過 任何更改集,因此更新不會導致任何更改。如果 由於交叉分支導致更新失敗,則使用'hg update'必須 來獲取所有子庫更新。

+0

就像我說的這個工程按預期的方式。 「'hg pull'給你上游變更集」,但是如果上游項目沒有任何變化,它不會影響你的存儲庫。如果你看拉的控制檯輸出,它甚至不會嘗試從subrepo獲取東西。我的問題是關於一種「圍繞」它的方式。 – realshadow

+0

我會重複 - 使用拉--update –

+0

我試過了,我會一直得到:hg pull --update 從ssh://[email protected]/cfh_webs/triangel.sk/dev取得 尋找變化 沒有變化發現 – realshadow