簡體   English   中英

如何撤消子目錄上的“svn switch”?

[英]How do I undo "svn switch" on a subdirectory?

這不是第一次,我不小心從項目根目錄下的某個地方執行了“svn switch”。 這只會切換該子目錄,但我該如何撤消呢?

如果我嘗試將子目錄切換回原始分支,我得到:

"svn: Directory 'subdir\_svn' containing working copy admin area is missing"

更新:我在子目錄中有更改,所以我不想刪除。

在短期內,我已經通過重新應用更改來修復它,但我正在尋找一種方法讓 Subversion 重新切換回我來自的地方......或者這是一個缺失的功能?

快速破解:刪除目錄 go 上一級,然后運行 svn 更新。

在不知道您是如何進行切換以及您的目錄和存儲庫布局如何的情況下,很難說出您的情況出了什么問題。

沒有辦法真正“恢復”開關。 通常,svn 切換可以通過切換回原始位置來撤消,即當原始位置位於 svn://url/to/orig/dir 時,以下應該有效:

將子目錄切換到存儲庫的不同部分

svn switch svn://path/to/switched/dir/ subdir

...然后再次切換回來

svn switch svn://url/to/orig/dir subdir

在你的情況下,聽起來好像你試圖切換一個不屬於你的工作副本的目錄。

我通過檢查切換目錄中的更改、刪除 .svn 文件和放錯位置的文件、然后使用svn checkout <rootUrl>svn update -r HEAD --force來修復此問題。

我認為沒有一種干凈的方法可以做到這一點。

如果最新的變化只是開關那么,

右鍵common parent directory,tortoise svn->Go to svn logs。 右鍵單擊 SVN 之前的版本 Switch 和 select Revert to this revision。

似乎可以運行另一個切換回您實際所在目錄的正確路徑。也就是說,如果您運行:

svn switch file:///srv/svn/someproject/branch/27

當你在某個項目/子目錄中時,然后運行

svn switch file:///srv/svn/someproject/branch/26/subdir

然后從正確的地方運行你原來的開關。

這似乎恢復了秩序。

我的用例看起來很簡單; 我想切換回當前目錄名稱以父目錄 URL 為根的目錄。當然,這里的麻煩是獲取並復制父目錄的 URL。Windows 批處理中的這個腳本為我做了這件事。 Bash 用戶可以更輕松地做到這一點,但要點就在這里。 似乎這個功能直接折疊到 SVN 中是微不足道的......

您可能需要在參數周圍添加引號才能切換,但我會把它留給您。 如果不是很明顯,您需要在要“取消切換”的目錄中運行它。 此時它不帶參數或任何東西,盡管如果您願意的話,這是一個非常直接的添加(如果%1不為空,則在頂部只需cd \d %1 )。

svn-unswitch.bat

@echo off
setlocal

for /f "tokens=*" %%u in ('svn info --show-item url ..') do set "PARENT_URL=%%u"
call :SetDirName %CD%
svn switch %PARENT_URL%/%DIRNAME%
goto :eof

:SetDirName
    set DIRNAME=%~nx1
    goto :eof

認證:在我的機器上工作!

svn revert <dir>

或者,是的,刪除它並獲取另一個副本。

暫無
暫無

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

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