簡體   English   中英

如何從 SVN 存儲庫中刪除文件/文件夾並添加到忽略列表

[英]How to remove a file/folder from a SVN repository and add to the ignore list

對我來說,這聽起來像是在手冊中查找的問題,但我找不到。 假設我們有一個包含文件和目錄的存儲庫,其中的文件和目錄不應受版本控制,而應位於忽略列表中(例如 Eclipse 文件.settings.project 、生成的文檔文件 - 不應該添加和首先提交)。 從存儲庫中刪除這些文件並將它們直接移到忽略列表中的最佳方法是什么?

更新:下面接受的答案詳細說明了設置本地 subversion 存儲庫以避免上述問題的好方法。 但是,如果您仍然必須解決這個問題,似乎您必須進行一些手動操作才能將文件/文件夾從存儲庫中取出並放到忽略列表中。

例如,對於.settings文件夾,首先將其添加到全局忽略列表中,然后運行以下命令:

$REMOVE=".settings"
cp -r "$REMOVE" /tmp/ && \
svn rm "$REMOVE" && \
svn commit -m "Moving to ignore list" "$REMOVE" && \ 
mv "/tmp/$REMOVE" .

這將文件/文件夾復制到一個臨時位置,然后將其從 SVN 中刪除並提交刪除 - 最后將文件/文件夾復制回,但由於它現在在忽略列表中,它將被 SVN 忽略。

Subversion 有兩種方式,一種是特定於用戶的,另一種實際上是在存儲庫中維護,因此影響到每個人。

對於全局忽略的文件列表(每個用戶/機器專有),您需要編輯 subversion 配置文件並更改miscellany部分中的global-ignores指令。 配置文件記錄在案,語法非常簡單。 例如:

global-ignores = *.o

在 UNIX 系統上,配置文件位於~/.subversion/config 在 Windows 系統上,配置文件位於%APPDATA%\\Subversion\\config或注冊表中HKCU\\Software\\Tigris.org\\Subversion\\Config

設置好之后,您永遠不會意外地將這些文件添加到您的存儲庫中,這些文件也不會顯示為? 在您的svn stat命令中。 如果您的存儲庫已經有這些文件,將它們保留原樣可能不會有什么壞處,但是將來對文件的更改和修改將被忽略。

要在每個項目的基礎上進行設置(這將影響簽出項目的任何人),您需要將 svn:ignore 屬性添加到可能存儲文件的項目目錄中。 例如,要從項目的頂層排除名為build的目錄,您可以執行以下操作:

svn propset svn:ignore 'build' .
svn commit -m 'project ignores build directory' .

從現在開始,你的項目中的 build 目錄將被 subversion 忽略。 有關更多信息,請參閱http://subversion.tigris.org/ 上的文檔或發出svn help命令以獲取更多信息。

編輯:根據評論添加了更多內容......不知道我怎么錯過了原始問題的那部分!! 對不起 :)

不幸的是,從存儲庫中刪除您現在想要忽略的文件是一個手動過程,但是,如果您確切知道它們是哪些文件,您可以編寫一個小腳本,讓遇到此問題的人可以運行(將來,svn:忽略屬性將使他們不必重復它,並且它的優點是能夠在需要時輕松修改)。

要從存儲庫中刪除不需要的文件,但保留本地文件,請執行以下步驟:

  1. 創建您的 global-ignores 條目或將 svn:ignore 屬性添加到您的存儲庫並提交。
  2. 對於要從​​存儲庫中刪除的每個文件,發出以下命令: svn rm --keep-local filename
  3. 為每個文件發出svn rm命令后,提交您的工作副本。

因為如果人們沒有更新他們的配置文件,這可能會從人們當前的工作副本中刪除文件,所以我強烈建議在存儲庫目錄中使用 svn:ignore 屬性。 這樣,當人們更新時,他們不會意外刪除文件,因為他們還沒有修改他們的global-ignores參數。

我可以通過使用TortoiseSVN工具來做到這一點。 他們提供了一個名為“刪除並添加到忽略列表”的 GUI 右鍵單擊​​選項。

svn remove filename

忽略:

svn propset svn:ignore filename|pattern

另請參閱如何...使 Subversion 忽略文件和文件夾

感謝這個答案正是我所需要的。 關於上面概述的最終腳本的一個想法,在您的腳本中執行 svn 導出而不是 cp -R 不是更好嗎? 這樣你就可以得到沒有任何 .svn 文件夾的干凈文件夾。

例如

$REMOVE=".settings"
svn export "$REMOVE" /tmp/ && \
svn rm "$REMOVE" && \
svn commit -m "Moving to ignore list" "$REMOVE" && \ 
mv "/tmp/$REMOVE" .

無論如何只是一個想法......

如果你想讓它們永遠消失(或者直到你自己添加它們),你svn rm它們,commi 並將它們添加到.svnignore

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM