
我想同步給定根目錄的所有子目錄的內容,但只同步根目錄本身的幾個檔案。為此,我想忽略使用該ignore
指令的所有檔案(保留所有子目錄)並重新新增我想與該ignorenot
指令一起保留的幾個檔案。為此,我嘗試了以下兩件事:
透過添加到我的個人資料中,添加正規表示式以排除根目錄中包含斜杠的任何條目
ignore = Regex ^(?!.*\/).*$
。但這會導致錯誤訊息如下,沒有進一步的解釋:Malformed pattern "Regex ^(?!.*\/).*$"."
首先忽略所有內容,
ignore = Name ?*
然後重新添加包含斜線的每個路徑ignorenot = Path */*
,這沒有按預期工作,因為不忽略目錄不能以這種方式工作。
這似乎是一個非常簡單的問題,但我無法理解它。
答案1
看來不可能完全照你的意願去做。當 Unison 同步檔案與目錄時,Unison 可以區分兩者之間的差異,但 Unison 不會以允許/
使用者與一個檔案進行模式匹配的方式以不同方式引用它們(例如,透過在目錄或其他內容中添加前綴)或其他。例如,如果您同步root 下名為 的目錄deer
和名為 的文件,Unison 會將它們視為phil
ROOT
new dir ----> ROOT/deer
new file ----> ROOT/phil
你無法區分ROOT/deer
和ROOT/phil
。不過這裡有一些建議
path = deer
透過在每個目錄的設定檔中新增一行來手動指定要同步的目錄。我認為這是配置 Unison 的標準方法。然後,對於根目錄中您也想要同步的任何文件,例如名為 的文件phil
,您可以移動phil
到像這樣同步的目錄deer/synced-root-files/
,然後添加符號連結從該檔案返回到您的根目錄cd ROOT; ln -s ROOT/deer/synced-root-files/phil
在根目錄中建立一個命名約定,您可以對其進行模式匹配。例如,僅命名所有文件不想要同步類似的內容
ignore.phil
,並將一行新增到您的 Unison 設定檔中ignore = Path ignore.*
。
這是一個連結路徑規範和忽略路徑Unison 手冊的各個部分,以便未來的讀者可以輕鬆找到它。