svn line教學 - 如何刪除文件夾的Subversion控件?




tortoisesvn教學 command (24)

您可以使用“svn export”創建該文件夾的副本而不使用svn數據,或者您可以添加該文件夾以忽略列表

我有一個文件夾, c:\websites\test ,它包含從不再存在的存儲庫檢出的文件夾和文件。 如何讓Subversion停止跟踪該文件夾以及任何子文件夾和文件?

我知道我可以簡單地刪除.svn文件夾,但許多圖層中有很多子文件夾。


使用svn export命令:

cd c:\websites\test
svn export c:\websites\test_copy

版本控制下的所有文件都將被導出。 仔細檢查以確保你沒有遺漏任何東西。


在Windows 7上,可以打開項目文件夾,如果隱藏文件已啟用,則搜索“.svn”並刪除所有找到的.svn文件夾。


答案非常簡單 - 將文件夾導出到自己 ! TortoiseSVN檢測到這種特殊情況,並詢問是否要使工作副本未版本化。 如果你回答是,控制目錄將被刪除,你將有一個普通的,未版本化的目錄樹。


最好,最簡單的方法

如果你認為你可以用簡單的魔法命令贏得勝利,那麼你就失敗了! SVN是非常棘手的,並總是以某種方式返回Xcode中的新錯誤消息。 遲早,承諾...所以你必須做到這一點聰明!

如您所知,Xcode下的常規和最佳做法是刪除左側項目窗格上的文件。 如果你錯過了它並以某種方式在Finder中刪除它,你就會陷入困境。 大麻煩! 但是,如果你做得好,你可以解決它並騰出時間。

首先,您需要刪除對文件或文件夾的SVN引用,然後才能真正刪除它

  1. 如果您可以將垃圾箱中的文件/文件夾放回去,或者在刪除時刪除最後一步,那麼...

  2. 去終端 - 是的,好老的終端 - 然後去那個地方。 最好的方法只需鍵入cd然後將文件夾/文件拖到終端。 你會得到類似的東西

cd /用戶/用戶名/文件/ Apps_Developing / ...

你可以檢查你在哪裡

LS

命令列出你的文件。

  1. 然後你需要用SVN命令刪除svn引用:

    svn delete --keep-local fileName_toDelete

這將從SVN存儲庫中刪除文件,但是您必須在Finder中手動刪除它。


如果您正在運行Windows,那麼您可以在該文件夾上搜索.svn ,並將其列出。 按Ctrl + A將選擇所有這些,按下刪除將刪除所有'麻煩'的Subversion的東西。


在Windows 10上,我們需要轉到Windows Explorer ,然後轉到View並選中View hidden files複選框。

然後導航到在Windows資源管理器中鏈接了SVN的文件夾並刪除.svn文件夾/文件。



NetBeans IDE用戶可以這樣做:

  1. 在您的IDE中打開SVN項目
  2. 選擇項目

    右鍵點擊Subversion Export

  3. 在對話框中

    導出到文件夾/ var / tmp / projectname按導出等待將顯示完成會問你想打開它嗎在飛行中打開

  4. 你現在可以切換到Git :)


svn export工作正常,但我認為這是:

svn rm --keep-local <folder/file>

它將它從本地存儲庫中刪除。


還有一個很好的小開源工具叫SVN Cleaner ,它在Windows資源管理器上下文菜單中增加了三個選項:

  • 全部刪除.svn
  • 刪除所有,但根.svn
  • 刪除本地回購文件

在Windows上,你可以添加一個快速鏈接到你的資源管理器右鍵菜單。 只需啟動此註冊表腳本:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Folder\shell\DeleteSVN]
@="Delete SVN Folders"

[HKEY_CLASSES_ROOT\Folder\shell\DeleteSVN\command]
@="cmd.exe /c \"TITLE Removing SVN Folders in %1 && COLOR 9A && FOR /r \"%1\" %%f IN (.svn) DO RD /s /q \"%%f\" \""

這會在您的右鍵菜單中添加一個名為“刪除SVN文件夾”的項目。 這將刪除此文件夾和所有子文件夾中的所有.svn文件夾。

來源(德文): http://www.sjmp.de/software/alle-svn-ordner-und-dateien-loeschen/ : http://www.sjmp.de/software/alle-svn-ordner-und-dateien-loeschen/


這些答案都不符合我的情況。 我在Subversion 1.8上,我有一個工作副本,它只在第一個文件夾root中有一個.svn文件夾。 但是,我想從工作副本中刪除一些分支。

無論我做了什麼,每當我運行“更新”時,它都會恢復這些文件並將它們全部帶回。 我不想從存儲庫中刪除它們,只是從我的電腦中刪除它們 - 但我需要保留工作副本的其餘部分(因此不能刪除.svn文件夾)。

解? svn update --set-depth exclude <dir>

這是排除特定目錄的客戶端“更新”。 它可以在svnbook.com的手冊中svnbook.com 。 簡而言之,它將其描述為:

從Subversion 1.6開始,您可以採取不同的方法。 首先,檢查完整的目錄。 然後在你不關心的一個子目錄上運行svn update --set-depth exclude。

對於TortoiseSVN,您還可以通過右鍵單擊不需要的文件夾來執行相同操作,單擊Update to revision... ,然後將“更新深度”設置為Exclude ,如下面的屏幕截圖所示:


我使用rsync:

# copy folder src to srcStripped excluding subfolders named '.svn'. retain dates, verbose output
rsync -av --exclude .svn src srcStripped

我的想法是刪除.svn文件夾,然後將所有其他文件移動到新文件夾。 它是如此簡單。


這個命令適用於我:

找 。 -iname“.svn”-print0 | xargs -0 rm -r


如果沒有Linux的子shell來刪除.svn文件夾:

find . -name .svn -exec rm -r -f {} +

rm = remove
-r = recursive (folders)
-f = force, avoids a lot of "a your sure you want to delete file XY".

當您使用Windows操作系統時,請轉至您的文件夾位置,並檢查隱藏文件是否已打開,然後您可以在其中看到SVN文件夾。 只要刪除該文件夾。


對於那些使用NetBeans和SVN的用戶,有一個選項“Subversion> Export”。


它對我很好:

find directory_to_delete/ -type d -name '*.svn' | xargs rm -rf

只需刪除所需文件夾內的.svn文件夾,然後控件將被自動刪除。


另一種(更簡單的)Linux解決方案:

rm -r `find /path/to/foo -name .svn`

嘗試svn導出

你應該可以做這樣的事情:

svn export /path/to/old/working/copy /path/to/plain/code

然後刪除舊的工作副本。

TortoiseSVN還具有導出功能 ,其功能相同。


你必須安裝

git
git-svn

從這個鏈接複製http://john.albin.net/git/convert-subversion-to-git

1.檢索所有Subversion提交者的列表

Subversion只列出每個提交的用戶名。 Git的提交有更豐富的數據,但最簡單的,提交作者需要列出一個名稱和電子郵件。 默認情況下,git-svn工具將在作者和電子郵件字段中列出SVN用戶名。 但是有了一點工作,你可以創建一個所有SVN用戶的列表,以及他們相應的Git名字和郵件是什麼。 這個列表可以被git-svn用來將普通的svn用戶名轉換成合適的Git提交者。

從本地Subversion簽出的根目錄運行以下命令:

svn log -q | awk -F '|' '/^r/ {sub("^ ", "", $2); sub(" $", "", $2); print $2" = "$2" <"$2">"}' | sort -u > authors-transform.txt

這將抓住所有的日誌消息,拔出用戶名,消除任何重複的用戶名,排序用戶名,並將其放置到“authors-transform.txt”文件。 現在編輯文件中的每一行。 例如,轉換:

jwilkins = jwilkins <jwilkins>

進入這個:

jwilkins = John Albin Wilkins <[email protected]>

2.使用git-svn克隆Subversion版本庫

git svn clone [SVN repo URL] --no-metadata -A authors-transform.txt --stdlayout ~/temp

這將執行標準的git-svn轉換(使用您在步驟1中創建的authors-transform.txt文件),並將git存儲庫放置在主目錄中的“〜/ temp”文件夾中。

3.將svn:ignore屬性轉換為.gitignore

如果你的svn repo使用svn:ignore屬性,你可以使用下面的命令輕鬆地將它轉換成.gitignore文件:

cd ~/temp
git svn show-ignore > .gitignore
git add .gitignore
git commit -m 'Convert svn:ignore properties to .gitignore.'

4.將倉庫推送到一個純粹的git倉庫

首先,創建一個裸倉庫,並使其默認分支匹配svn的“trunk”分支名稱。

git init --bare ~/new-bare.git
cd ~/new-bare.git
git symbolic-ref HEAD refs/heads/trunk

然後將臨時存儲庫推送到新的裸存儲庫。

cd ~/temp
git remote add bare ~/new-bare.git
git config remote.bare.push 'refs/remotes/*:refs/heads/*'
git push bare

您現在可以安全地刪除〜/ temp存儲庫。

5.將“trunk”分支重命名為“master”

您的主要開發分支將被命名為“trunk”,它與Subversion中的名稱相匹配。 你需要使用以下命令將其重命名為Git的標準“主”分支:

cd ~/new-bare.git
git branch -m trunk master

清理分支和標籤

git-svn將所有的Subversions標籤都變成了“tags / name”形式的Git中非常短的分支。 您將要使用以下命令將所有這些分支轉換為實際的Git標記:

cd ~/new-bare.git
git for-each-ref --format='%(refname)' refs/heads/tags |
cut -d / -f 4 |
while read ref
do
  git tag "$ref" "refs/heads/tags/$ref";
  git branch -D "tags/$ref";
done

這一步將需要一些打字。 :-)但是,別擔心, 你的Unix shell會提供一個以git for-each-ref開始的超長命令的次要提示符。





svn