2010-03-03 77 views
22

我正在努力如何正確使用TortoiseHg跟蹤嵌套的存儲庫。使用Mercurial/TortoiseHg處理嵌套Hg庫的正確方法是什麼?

我有一個主要的存儲庫來跟蹤我的整個項目。這個項目包含了一些存儲在插件/子目錄中的小插件。

我希望獨立地跟蹤每個插件(爲每個插件提交併推送BitBucket),同時仍然能夠對項目進行「整體」提交,包括對插件所做的更改並將其推送到另一個位置(不是BitBucket)。

我到目前爲止所做的是爲我的每個插件創建一個新的回購。我可以輕鬆地將它們推送到BitBucket。但是當我去提交我的「主」存儲庫時,TortoiseHg顯示一條錯誤消息,說abort: path 'mainrepo\\plugins\\plugin1\\plugin1.php' is inside repo 'mainrepo\\plugins\\plugin1'

我可以看到我做錯了什麼,但我不知道是什麼。我在WinXP上使用Mercurial和TortoiseHg(ToirtoiseHg版本0.9.3 + 237-ea50f793bbe4和Mercurial-1.4.3 + 225-70dea42c9406)的夜間服務。我讀到了subrepos處理被添加到了這個TortoiseHg版本,但是,我甚至不確定subrepos是我應該在這裏使用的功能。

更新
我已經取得了一些進展,但仍然無法得到它的工作我想的方式。
這裏是我的結構:這裏

-- .hg 
-- core 
-- app 
    -- file.php 
    -- file.css 
    -- plugins 
     -- plugin1 
      -- file1.php 
     -- plugin2 
      -- file2.php 

我去應用/插件,並克隆插件(名爲plugin3)從到位桶。然後,我在根目錄下創建了一個.hgsub文件,並在其中添加了app/plugins/plugin3 = app/plugins/plugin3。 我然後能夠提交我的整個目錄。

但是我試圖從BitBucket獲取最新版本的plugin1,所以我去了app/plugins,刪除了plugin1 /文件夾並從BitBucket中克隆了plugin1。然後我加入app/plugins/plugin1 = app/plugins/plugin1到.hgsub但是當我試圖提交它,我與abort: path 'app/plugins/plugin1/file1.php' is inside repo 'app\\plugins\\plugin1'

迎接這個問題似乎是,當我subrepo擁有相同的名字已經被汞在plugins /目錄跟蹤的目錄火。

我在做什麼錯?我應該添加/編輯東西在我的插件的.hg特殊?

更新
我終於設法讓它按我想要的方式工作。
我不得不爲「手動」告訴水銀刪除插件/ plugin1,插件/ plugin2目錄,提交更改,然後從到位桶克隆回plugin1和plugin2,加app/plugins/plugin1 = app/plugins/plugin1到.hgsub並提交所有。有效。
重要步驟已經刪除的plugin1/plugin2文件夾後提交。

+0

從文檔,以'.hgsub'是行「第一個‘套’是我們的工作目錄的路徑,第二個是一個URL或路徑從拉」:所以你不應該把' app/plugins/plugin3 = app/plugins/plugin3「,而是app/plugins/plugin3 = plugin3的bitbucket url。同上plugin1 – VonC 2010-03-04 05:07:25

+0

我試過用'http:// bitbucket.org/username/plugin3 /','https:// username @ bitbucket.org/username/plugin3 /'甚至是'ssh:// hg @ bitbucket.org/username/plugin3'作爲url,但仍然有相同的中止消息。我已經從命令行直接嘗試了,結果是一樣的。 – pixelastic 2010-03-04 11:38:24

+0

抱歉沒有回覆您的最新評論,但除非您的評論以'@VonC'開頭,否則我將不會收到通知。請參閱http://blog.stackoverflow.com/2010/01/new-improved-comments-with-reply/(「評論@用戶名通知」部分) – VonC 2010-03-04 14:29:45

回答

18

我終於設法使它工作我喜歡的方式。我在winXP上使用TortoiseHg,所以我不能告訴你在內部做了什麼樣的hg調用,但我不認爲在這裏使用任何幻燈片。

我開始了一個現有的回購,其中我有一個plugins/目錄充滿plugin1/plugin/2目錄(不是儲存庫,只是簡單的目錄)。 我也有這些插件在線,託管在BitBucket上。

  • 我第一次去我plugins/目錄,右鍵單擊plugin1/TortoiseHg => Remove Files
  • 我找回我的回購協議的根源,右鍵單擊並Hg Commit
  • 然後我又回到了我的plugins/目錄,右鍵單擊,TortoiseHg => Clone...,我選擇的插件的HTTP地址位桶(http://bitbucket.org/username/plugin1/和點擊Done
  • 到主回購根的再次回來。我創建(或編輯,如果文件已經存在)一個.hgsub文件,並添加里面的plugins/plugin1 = plugins/plugin1線。
  • 當時我能夠來提交的主要根源回購,或插件1回購獨立

注意,如果新克隆的回購有一個已經被跟蹤目錄同名的額外removecommit步驟纔是必需的。

+0

@Pixelastic:謝謝你的反饋(+1) – VonC 2010-03-05 12:59:06

+0

甜。你已經回答了我的幾個問題。 – 2010-07-28 03:14:34

5

你應該嘗試使用:

  • Forest extension
  • (更好的選擇,因爲正式在汞柱):在​​

Subrepositories是一項功能,允許您將一組存儲庫視爲一組。
這將允許你克隆,承諾,推,拉項目及其相關的庫爲一組。

+0

我是否必須手動編輯.hgsub文件或者TortoiseHg是否自行處理(通過檢查某些選項)? – pixelastic 2010-03-03 15:34:34

+0

@Pixelastic:對於TortoiseHg和subrepos,請參閱http:// stackoverflow。com/questions/2083393/mercurial-subrepos-how-do-you-create-them-and-how-do-they-work – VonC 2010-03-03 15:41:54

+0

@VonC:謝謝,但我已經閱讀過那篇文章,而且我不想我的插件作爲我的主應用程序在一個單獨的文件夾中,我希望它們作爲子目錄。 我已經用我的進度更新了主要問題。感謝您的時間 – pixelastic 2010-03-04 00:00:41

相關問題