version-control branch概念 - 我如何忽略SVN的目錄?




svn合併分支 trunk (20)

Eclipse解決下一個問題:

首先,將文件夾同步到項目中:

團隊 - >同步

在下一個視圖(團隊視圖)中,您可以看到您可以提交給SVN服務器的所有資源。

因此,選擇您要忽略的資源的資源文件夾,然後可以使用忽略它

團隊 - >添加到svn:ignore

之後,在確認窗口中,請選擇第一個選項:“按名稱忽略”。

例如,如果我想忽略目標文件夾及其.class資源,我會同步,並在同步視圖中選擇目標文件夾。 之後,我會選擇

team->添加

svn:ignore ,然後我會確認確認窗口中的第一個選項。

我剛開始使用SVN,我有一個緩存目錄,我不需要在源代碼控制下。 我如何忽略SVN的整個目錄/文件夾?

我在OS X和命令行上使用VersionsTextMate


“謝謝你” svn這樣一個可怕的,虛假的和難以忽視的文件。

所以我寫了一個腳本svn-ignore-all

#!/bin/sh

# svn-ignore-all

# usage: 
#   1. run svn status to see what is going on at each step 
#   2. add or commit all files that you DO want to have in svn
#   3. remove any random files that you don't want to svn:ignore
#   4. run this script to svn:ignore everything marked '?' in output of `svn status`

svn status |
grep '^?' |
sed 's/^? *//' |
while read f; do
    d=`dirname "$f"`
    b=`basename "$f"`
    ignore=`svn propget svn:ignore "$d"`
    if [ -n "$ignore" ]; then
        ignore="$ignore
"
    fi
    ignore="$ignore$b"
    svn propset svn:ignore "$ignore" "$d"
done

另外,要忽略特定的文件/路徑名列表,我們可以使用這個變種svn-ignore 。 我猜svn-ignore-all應該像xargs svn-ignore一樣。

#!/bin/sh

# svn-ignore

# usage:
#   svn-ignore file/to/ignore ...

for f; do
    d=`dirname "$f"`
    b=`basename "$f"`
    ignore=`svn propget svn:ignore "$d"`
    if [ -n "$ignore" ]; then
        ignore="$ignore
"
    fi
    ignore="$ignore$b"
    svn propset svn:ignore "$ignore" "$d"
done

還有一件事:我傾向於用許多隨機文件污染我的svn結賬。 當需要提交的時候,我將這些文件移動到一個“舊”子目錄中,並告訴svn忽略“舊”。


如果您使用像TortoiseSVN這樣的SVN前端,或者某種IDE集成,那麼在同一個菜單中也應該有一個忽略選項,即提交/添加操作。


先刪除它...

如果您的目錄foo已經受版本控制,請先使用以下命令將其刪除:

svn rm --keep-local foo

...然後忽略:

svn propset svn:ignore foo .

如果您使用特定的SVN客戶端TortoiseSVN ,則在提交時,您可以選擇右鍵單擊項目並選擇“添加到忽略列表”。


設置svn:ignore this 。 大多數UI svn工具都有辦法做到這一點,以及鏈接中的命令行討論。


如果您的項目目錄名為/ Project,並且您的緩存目錄名為/ Project / Cache,那麼您需要在/ Project上設置一個subversion屬性。 屬性名稱應該是“svn:ignore”,屬性值應該是“Cache”。

有關屬性的更多信息,請參閱Subversion手冊中的this頁面。


要稍微擴展,如果你使用svn命令行工具來完成這項工作,你需要輸入:

svn propedit svn:ignore path/to/dir

這將打開你選擇的文本編輯器,然後輸入'*'忽略其中的所有內容,並保存+ quit - 這將包括目錄本身在svn中,但忽略其中的所有文件,忽略目錄,使用父級的路徑,然後在該文件中鍵入目錄的名稱。 保存後,運行更新('svn'),然後檢入相應的路徑。


注意你的尾部斜線。 我發現在我的忽略設置文件中包含images/*不會忽略./images/ 。 當我運行svn status -u它仍然顯示? images ? images 。 所以,我只是將忽略設置更改為images ,而不是斜杠。 進行狀態檢查並將其清除。


在花了很多時間尋找如何做這個簡單的活動之後,我決定發布一個不錯的解釋。

首先讓示例結構

$ svn st? 項目/主幹/目標? 項目/主幹/ myfile.x

1 - 先配置編輯器,在mycase vim中導出SVN_EDITOR = vim

2 - “svn propedit svn:ignore project / trunk /”會打開一個新文件,你可以在我們的文件和子目錄中添加案例類型“target”保存並關閉文件並運行

$ svn st? 項目/主幹/ myfile.x

謝謝。


既然你使用的是版本,那其實很簡單:

  • 瀏覽您的簽出副本
  • 點擊要忽略的目錄
  • 在“忽略”框中右鍵單擊“編輯”
  • 鍵入*。*忽略所有文件(或者* .jpg僅用於JPG文件等)

保持SVN將忽略的目錄:

  1. 這將從存儲庫中刪除文件,但保持SVN控制下的目錄:

svn delete --keep-local path / directory_to_keep / *

  1. 然後設置為忽略目錄(和所有內容):

svn propset svn:忽略“*”path / directory_to_keep


Bash oneliner多重忽略:

svn propset svn:ignore ".project"$'\n'".settings"$'\n'".buildpath" "yourpath"

我有問題讓嵌套的目錄被忽略; 我想忽略的頂層目錄不會顯示'svn status',但所有的子目錄都會顯示。 這對其他人來說可能是不言而喻的,但我想我會分享它:

例:

/樹幹

/主幹/緩存

/主幹/緩存/ subdir1

/主幹/緩存/ subdir2

cd /trunk
svn ps svn:ignore . /cache
cd /trunk/cache
svn ps svn:ignore . *
svn ci

賈森的回答將會訣竅。 但是,不要將svn:ignore設置為“。”。 在高速緩存目錄中,如果高速緩存目錄不總是存在,則可能需要在目錄的svn:ignore屬性中包含“高速緩存”。 我在一些“一次性”文件夾上做這個。


重要的是要提到:

在命令行中,你不能使用

svn add *

這也會添加被忽略的文件,因為命令行擴展* ,因此svn add認為你想要svn add所有文件。 因此,請改用此方法:

svn add --force .

由於我花了一段時間試圖讓它起作用,應該注意的是,如果文件已經存在於SVN中,則需要svn delete它們,然後編輯svn:ignore屬性。

我知道這似乎很明顯,但他們一直顯示為? 在我的svn status列表中,當我以為它會在本地忽略它們。


這是一個示例目錄結構:

\project
    \source
    \cache
    \other

project時,您會看到您的緩存目錄未添加並顯示。

> svn st
M  source
?  cache

要設置忽略屬性,請執行

svn propset svn:忽略緩存。

其中svn:ignore是您設置的屬性的名稱, cache是屬性的值,而. 是您設置此屬性的目錄。 它應該是需要該屬性的cache目錄的父目錄。

要檢查設置了哪些屬性:

> svn proplist
Properties on '.':
  svn:ignore

要查看svn:ignore的值svn:ignore

> svn propget svn:ignore
cache

刪除以前設置的屬性:

svn propdel svn:ignore

...如果你想忽略多個目錄(比如build/ temp/*.tmp文件),你可以分兩步做(忽略第一個和編輯忽略屬性(參見這裡的其他答案)或者一個可以寫些類似的東西

svn propset svn:ignore "build
temp
*.tmp" .

在命令行上。


創建一個用戶文件(即users.txt )將SVN用戶映射到Git:

user1 = First Last Name <[email protected]>
user2 = First Last Name <[email protected]>
...

您可以使用這一行代碼從現有的SVN存儲庫構建模板:

svn log --xml | grep "<author>" | sort -u | perl -pe 's/.*>(.*?)<.*/$1 = /' | tee users.txt

如果發現缺少SVN用戶不在文件中,SVN將停止。 但在此之後,您可以更新文件和提取您離開的地方。

現在從存儲庫中取出SVN數據:

git svn clone --stdlayout --no-metadata --authors-file=users.txt svn://hostname/path dest_dir-tmp

這個命令將在dest_dir-tmp創建一個新的Git倉庫,並開始提取SVN倉庫。 請注意,“--stdlayout”標誌意味著您有共同的“trunk /,branches /,tags /”SVN佈局。 如果你的佈局不同,熟悉--tags ,-- --branches ,-- --branches選項(一般git svn help )。

所有常見的協議都是允許的: svn://http://https:// 。 該網址應該以http://svn.mycompany.com/myrepo/repository為目標 。 那一定不能包含/trunk/tag/branches

請注意,在執行這個命令之後,它經常看起來像是“掛起/凍結”操作,並且在初始化新的存儲庫之後很長時間卡住是非常正常的。 最終你會看到日誌消息,表明它正在遷移。

還要注意的是,如果你省略了--no-metadata標誌,Git會在提交消息中附加關於相應SVN修訂版本的信息(例如git-svn-id: svn://svn.mycompany.com/myrepo/<branchname/trunk>@<RevisionNumber> <Repository UUID>

如果找不到用戶名,請更新您的users.txt文件,然後:

cd dest_dir-tmp
git svn fetch

如果你有一個很大的項目,你可能需要多次重複上一個命令,直到所有的Subversion提交都被提取出來為止:

git svn fetch

完成後,Git會將SVN trunk檢入到一個新的分支。 任何其他分支設置為遙控器。 您可以通過以下方式查看其他SVN分支:

git branch -r

如果你想在你的倉庫中保存其他遠程分支,你想為每一個分支手動創建一個本地分支。 (跳過主幹/主)。如果你不這樣做,分支將不會在最後一步克隆。

git checkout -b local_branch remote_branch
# It's OK if local_branch and remote_branch are the same name

標籤是作為分支導入的。 你必須創建一個本地分支,製作一個標籤並刪除分支,把它們作為Git中的標籤。 用標籤“v1”來做:

git checkout -b tag_v1 remotes/tags/v1
git checkout master
git tag v1 tag_v1
git branch -D tag_v1

將你的GIT-SVN庫克隆到一個乾淨的Git倉庫中:

git clone dest_dir-tmp dest_dir
rm -rf dest_dir-tmp
cd dest_dir

您之前從遠程分支創建的本地分支只會被作為遠程分支複製到新克隆的存儲庫中。 (跳過中繼線/主站。)對於每個要保留的分支:

git checkout -b local_branch origin/remote_branch

最後,從乾淨的Git存儲庫中刪除指向現在已刪除的臨時存儲庫的遠程文件:

git remote rm origin




svn version-control directory folders