2011-08-31 25 views
1

我正在處理一個放入SVN的共享項目。該項目的目錄結構如下:如何從SVN中排除文件夾而不是其子代SVN中的更新

ParentDir
    - Child_Dir_1
        + GrandChild_Dir_1
        + GrandChild_Dir_2
    - Child_Dir_2

Child_Dir_1包含配置文件(Eclipse的.LAUNCH文件),並且人們將各種文件放在此文件夾中。

所以,每次我更新我的源代碼(通過右鍵點擊ParentDir並選擇更新),我得到了很多我不需要的配置,我必須手動刪除它們。

我仍然需要更新Child_Dir_1(即GrandChild_Dir_1和GrandChild_Dir_2)的子項。

我試圖去設置Child_Dir_1的「忽略」屬性來排除* .LAUNCH文件,但每次我更新源代碼時,手動刪除的那些都會恢復到Child_Dir_1。

回答

1

由於您使用TortoiseSVN:

進入Child_Dir_1,選擇GrandChild_Dir_1 and GrandChild_Dir_2並點擊右鍵,TortoiseSVN的 - >更新。

這將只更新這兩個文件夾。

忽略的是,這樣就可以「忽略」(從提交,狀態等)未跟蹤文件,未在選中的文件。

+0

我認爲在提交龜龜可能會抱怨Child_Dir_1不是最新的,並會中止提交。 – Dialecticus

+0

@Dialecticus它不應該影響。只有正在提交的文件應該被更新。 – manojlds

+0

您的解決方案需要一些手動工作,並且可能無法在這種情況下工作,因爲實際上ParentDir下有很多文件夾(不像我的示例中那樣)。我通常通過右鍵單擊ParentDir來更新我的項目並選擇「更新」(使用Tortoise SVN)。我正在尋找一種方法,我仍然可以在「一次性」中執行更新並跳過Child_Dir_1。謝謝 – Tom

0

這可能是manojlds'答案是你的解決方案,但我有疑問。這裏的問題是那些文件真的是項目的一部分。它們是不可避免的,必須與工作副本的其餘部分保持同步。選項1(最好):刪除表單存儲庫中的所有配置文件,或者更好地在存儲庫中只有配置模板文件(例如文件名中的第一個字符爲$)。每個用戶都可以將這些模板文件複製到真正的配置文件並相應地進行更改配置文件不應該被提交。只有模板文件應該,但更新模板文件不會混淆任何用戶的當前配置文件。

選項2(次佳):忽略這些配置文件。使用自己的文件進行自己的配置,名稱不與現有衝突。您甚至可以將您的文件添加到SVN,但您可能不會添加它們。無關緊要,只要你不需要在另一臺機器上進行配置即可。

選項3:使用ignore-on-commit組。使用那些已經存在的配置文件。改變他們到你的喜好,但不要提交他們。爲了確保您不會無意中將它們標記爲不可提交(轉到提交窗口,選擇所有不可提交的文件,請右鍵單擊>移動到更改列表> ignore-on-commit)。與此問題是您的文件不受其他用戶的更新保護,但可能實際上是一件好事。

選項4:將文件夾切出(可怕的黑客攻擊)。從工作副本中刪除Child_Dir_1(右鍵單擊它>更新到修訂版本>將工作深度設置爲排除)。首先保存文件夾,因爲它會消失。之後,再次創建它,在其中籤出所有子文件夾(GrandChild_Dir_1和GrandChild_Dir_2),並複製您的配置文件。現在您可以完全控制文件夾的內容,但更新和提交變得更加複雜。

編輯:理論上有選項5,但我懷疑它可以成功實施。您可以嘗試:使用NTFS hard links。將所有文件作爲硬鏈接複製到現有文件,但.svn文件夾及其內容除外。原始目錄用於SVN操作更新,提交,添加和刪除,新目錄用於編輯文件。從新目錄中刪除所有不需要的文件,並插入所需的所有文件,這些文件不是SVN的一部分。這裏的問題是從SVN中刪除文件並將它們添加到SVN時的額外工作。

+0

選項1不適用於我的情況。選項2也不能像Eclipse一樣工作,我會看到幾十個運行配置填滿屏幕,這會很煩人。選項3:我的配置文件有不同的名稱,所以沒有更新會覆蓋我的。我永遠不會在此文件夾中提交任何內容。選項4不適用於我,因爲修改文件夾結構不是一個選項(這是一個共享項目,我只是一個普通成員)。謝謝 – Tom

+0

@Tom,我添加了另一個選項,如果你覺得冒險... – Dialecticus