2011-01-29 44 views
1

如何告訴mercurial每次運行hg clone/home/hg/repo1而不跟蹤它時,將/home/configs/config.ini中的文件複製到本地克隆中?如何檢出配置文件並使用mercurial重命名它?

例如

> ls -l /home/hg/repo1 
    file_one.py 
    file_two.py 

> hg clone /home/hg/repo1 /home/me/repo1 
> cd /home/me/repo1 
> ls -l /home/me/repo1 
    file_one.py 
    file_two.py 
    config.ini 

感謝, 馬丁

回答

2

這樣做的最佳方式是通過跟蹤一個叫,說config.ini.example文件,然後將其複製到config.ini,幷包括在config.ini.hgignore文件。如果第一次運行,如果它尚不存在,您也可以讓您的應用程序生成config.ini

克隆操作沒有(記錄的)掛鉤,因爲克隆時會創建一個新的存儲庫。由於此回購是全新的,因此它沒有.hgrc文件來定義掛鉤。也就是說,你運行的鉤子是從新的存儲庫中,而不是舊的之一。

+0

嗨保羅。這正是我想要做的 - 從/home/configs/config.ini複製config.ini文件 - 但直接在克隆上 - 無需執行手動cp。我正在研究鉤子,但我找不到克隆動作的鉤子。 – Martin 2011-01-29 21:44:27

+0

那麼你的建議是保羅?我寧願避免手動複製東西。 – Martin 2011-01-29 22:13:52

1

一種方法是定義hook like changegroup,其中您在克隆後立即執行拷貝。
唯一的問題:該掛鉤將不會運行硬鏈接路徑,如issue 1602中所報告。

2

你可以用鉤子來做,但你會發現它比創建一個清晰的README.txt更麻煩。 :)

掛鉤會是什麼樣子:

[hooks] 
post-clone = cp -i config.ini.sample config.ini 

正如保羅·菲捨爾指出,最好使用.sample這是在回購不是像/home/configs/config.ini那是出了回購。

正如VonC所指出的那樣,問題是鉤子不會複製到克隆上 - 這也是一個很好的理由:如果克隆也會導致掛鉤,那麼我會把post-clone = rm -rf ~放在那裏真的毀了你的一天。

所以,如果你設置使用鉤子的方式是將鉤子放在回購站外。在企業環境中,您可以在所有系統上的/etc/mercurial/hgrc文件中執行此操作,如果您擁有體面的IT設置,則可以集中進行操作。因爲聽起來你確定會有一個/ home/configs用戶目錄,這聽起來像你可能在談論所有在一臺機器上的克隆,這對你來說是一個很好的選擇。但是,在更分散的環境中,您可以讓每個人都手動安裝您想要的鉤子在他們自己的~/.hgrc中,並且在那時您可能只需讓他們自己完成副本。

值得考慮的一個想法是檢查是否任何解釋你的config.ini文件有一個include-like指令?然後,你可以有克隆向下config.ini樣子:

... some stuff 
%include /home/configs/config.ini 
... more stuff 

在這種情況下,沒有複製是必要的。水銀,例如,確實有一個include指令的作品就像是:http://www.selenic.com/mercurial/hgrc.5.html#syntax

0

這聽起來像你只需要硬連接的文件,讓每一個你在/home/me/repo1運行hg update時間/home/configs更新文件,以及:

rm /home/configs/config.ini 
ln /home/me/repo1/config.ini /home/configs/config.ini 

請注意,您不必刪除克隆和reclone來更新您的工作副本。只需使用hg pullhg update即可。

相關問題