2014-07-20 32 views
10

我有一個linux目錄(並且不需要任何窗口結賬):跟隨符號連接在SVN

/home/me/projects/project1 

在這個項目中,我需要SVN(1.8.8)遵循符號鏈接「鏈接1」:

/home/me/projects/project1/link1/<some_directories_and_files> 

但SVN不會讓我做到這一點,只需添加link1而不是它的內容。如果我嘗試添加的內容,我得到一個錯誤:

svn add link1/* 
svn: E145001: Can't schedule an addition of '/home/me/projects/project1/link1/first_directory' below a not-directory node 

我試圖轉換鏈接1硬鏈接,但我不能這樣做,或者:

ln /path/to/my/linked/directory link1 
ln: ‘/path/to/my/linked/directory’: hard link not allowed for directory 

任何想法?你如何處理這種配置?我只是需要如果我理解你的問題,從/home/me/projects/project1從一個簡單的svn commit

回答

7

承諾的一切,你有:

project1/ 
project1/link1 -> ../../some/where/else 

如果你做一個簡單的svn add link1它增加了一個符號鏈接進入到顛覆存儲庫中,但什麼你試圖完成的是將其他地方的東西放到樹中。

如果出現這種情況,那麼你的方向是錯的,你應該在link1下創建真實的文件和目錄,並將目標位置符號鏈接到link1目錄中。這將是解決這個問題的簡單方法。

另一種解決方案是將位置../../some/where/else作爲svn位置,並將link1作爲外部定義到該位置。當你在主目錄中提交時,外部實體將同時提交,這將實現存儲信息;但爲了確保其他位置保持同步,您必須確保將其更新爲與存儲的數據相同的版本。

就我而言,我的桌面上,我有一個設置目錄:

$HOME/settings 

這是一個包含.bashrc.profile.vimrc.vim等文件和文件夾從一個目錄中的檢出的副本svn回購。我所有的配置文件和目錄都符號鏈接到這個文件夾中,例如.profile - >settings/.profile等。當我進行更改時,它們反映在svn樹中,我可以將它們反饋回來以確保我不會當我去另一個系統時丟失我的配置設置。

如果你真的想SVN遵循符號鏈接爲硬鏈接(你不能讓目錄的硬鏈接,因爲這將是一個壞事™),那麼你就必須破解svn客戶端源,使得它做了什麼你自找的;但這將是一場維護噩夢。

可能脫離使符號鏈接成爲一個綁定掛載點直接指向目標,但它有它自己的問題 - 你需要是root來完成這一點,它最終會留下有趣的條目/ proc/mounts來完成這個:

mount --bind /absolute/path/to/some/where/else project1/link1 
+0

很好的答案。現在我將使用簡單的解決方案。 – Cyrille

+0

哦,我只記得爲什麼我這樣做(符號鏈接到工作副本內的外部目錄):我需要www-data用戶能夠在這個目錄中寫入文件。由於我不想將我的主目錄中的權限更改爲我的工作副本,所以我想我將不得不瀏覽您的替代解決方案... – Cyrille

+0

大聲笑,皮特,猜猜哪個符號鏈接將我帶到這裏? ;-)讓我們迅速移動它! – gatopeich