我正在尋找一種很好的方法來自動'svn添加'工作副本中的所有未版本控制的文件到我的SVN存儲庫。我如何將所有未版本控制的文件添加到SVN?
我有一個活的服務器,可以創建一些應該在源代碼管理下的文件。我想要一個簡短的腳本,我可以運行它來自動添加這些腳本,而不是一次一個地添加它們。
我的服務器正在運行Windows Server 2003所以Unix解決方案將無法工作。
我正在尋找一種很好的方法來自動'svn添加'工作副本中的所有未版本控制的文件到我的SVN存儲庫。我如何將所有未版本控制的文件添加到SVN?
我有一個活的服務器,可以創建一些應該在源代碼管理下的文件。我想要一個簡短的腳本,我可以運行它來自動添加這些腳本,而不是一次一個地添加它們。
我的服務器正在運行Windows Server 2003所以Unix解決方案將無法工作。
svn add --force * --auto-props --parents --depth infinity -q
偉大的小費!一條評論:我的Eclipse自動將新文件添加到忽略列表。這可能是一個配置問題,但無論如何:有幫助的--no-ignore
選項。
在此之後,你可以承諾:
svn commit -m 'Adding a file'
這是一個不同的question to mine但關於這個問題的所屬的答案有:
svn status | grep '?' | sed 's/^.* /svn add /' | bash
我覺得我已經做了類似的事情:
svn add . --recursive
但不知道如果我的內存是正確的; -p
TortoiseSVN內置此功能,如果您願意使用非命令行解決方案。只需右鍵單擊頂層文件夾並選擇添加 ...
用途:
svn st | grep ? | cut -d? -f2 | xargs svn add
這爲我工作:
svn add `svn status . | grep "^?" | awk '{print $2}'`
(Source)
正如你已經解決您的問題適用於Windows,這是一個UNIX解決方案(遵循Sam)。我在這裏添加了,因爲我認爲它對於那些要求相同的事情的人仍然有用(因爲標題不包含關鍵字「WINDOWS」)。
注(2月,2015年): 作爲評論由「bdrx」,上述命令可以以這種方式被進一步簡化:
svn add `svn status . | awk '/^[?]/{print $2}'`
此方法應處理具有任何數量/組合的文件名在他們的空間...
svn status /home/websites/website1 | grep -Z "^?" | sed s/^?// | sed s/[[:space:]]*// | xargs -i svn add \"{}\"
這裏是一個命令所做的解釋:
使用xargs的-i參數來處理能夠將文件名與空格導入到'svn add'中 - 基本上,-i sets {}用作佔位符,因此我們可以將「字符放在通過使用「svn添加」使用的文件名
這種方法的優點是,這應該處理與空格的文件名在其中
什麼工作原理是這樣的:
c:\>svn add . --force
添加子目錄的內容
不添加被忽略的文件。
列出添加了哪些文件。
命令中的點表示當前目錄,如果要添加與當前目錄不同的目錄,則可以用特定的目錄名稱或路徑替換該目錄。
我總是用:
複製粘貼&
svn st | grep "^\?" | awk "{print \$2}" | xargs svn add $1
svn add --force .
這會在當前目錄和所有版本的子目錄添加任何版本的文件。
for /f "usebackq tokens=2*" %%i in (`svn status ^| findstr /r "^\?"`) do svn add "%%i %%j"
在此實現中,你會遇到麻煩的情況下您的文件夾/文件名有類似下面一個以上的空間:
"C:\PROJECTS\BACKUP_MGs_via_SVN\TEST-MG-10\data\destinations\Sega Mega 2"
"C:\PROJECTS\BACKUP_MGs_via_SVN\TEST-MG-10\data\destinations\One space"
"C:\PROJECTS\BACKUP_MGs_via_SVN\TEST-MG-10\data\destinations\Double space"
"C:\PROJECTS\BACKUP_MGs_via_SVN\TEST-MG-10\data\destinations\Single"
這種情況下由簡單的覆蓋:
for /f "usebackq tokens=1*" %%i in (`svn status ^| findstr /r "^\?"`) do svn add "%%j"
如果您在Windows中使用Linux或使用Cygwin或MinGW,則可以使用類似bash的解決方案。這裏的其它相似的人對比,這其中考慮到文件的命名空間:
svn status| grep ^? | while read line ; do svn add "`echo $line|cut --complement -c 1,2`" ;done
這是和記錄在SVN書的最簡單和完美的作品對我來說
svn add * --force
由於這篇文章被標記爲Windows,我以爲我會爲Windows制定解決方案。我想讓這個過程自動化,並且製作了一個bat文件。我反對在C#中製作console.exe。
我想添加任何文件或文件夾,這些文件或文件夾在開始提交過程時未添加到我的存儲庫中。
很多答案的問題是,他們會列出未受版本控制的文件,根據我在TortoiseSVN中的忽略列表應該忽略這些文件。
這是我的鉤設置和批處理文件,它這是否
龜鉤子腳本:
"start_commit_hook".
(where I checkout) working copy path = C:\Projects
command line: C:\windows\system32\cmd.exe /c C:\Tools\SVN\svnadd.bat
(X) Wait for the script to finish
(X) (Optional) Hide script while running
(X) Always execute the script
svnadd.bat
@echo off
rem Iterates each line result from the command which lists files/folders
rem not added to source control while respecting the ignore list.
FOR /F "delims==" %%G IN ('svn status ^| findstr "^?"') DO call :DoSVNAdd "%%G"
goto end
:DoSVNAdd
set addPath=%1
rem Remove line prefix formatting from svn status command output as well as
rem quotes from the G call (as required for long folder names). Then
rem place quotes back around the path for the SVN add call.
set addPath="%addPath:~9,-1%"
svn add %addPath%
:end
花了一些時間嘗試弄清楚如何遞歸添加一些文件,我認爲這將是有效的分享什麼工作對我來說:
FOR /F %F IN ('dir /s /b /a:d') DO svn add --depth=empty "%F"
FOR /F %F IN ('dir /s /b /a *.cs *.csproj *.rpt *.xsd *.resx *.ico *.sql') DO svn add "%F"
這裏有一些解釋。
第一個命令添加所有目錄。第二個命令僅將文件相應地添加到指定的模式。
讓我提供更多的細節:
在第二個命令中,唯一的區別是dir命令和svn命令,我認爲它已經足夠清楚了。
@Saul這個問題明顯早於你鏈接的問題,所以我不明白它是如何重複的。如果有其他問題是重複的。 – Neutrino 2014-02-13 12:03:56
Cygwin是一個選項。在任何Windows環境中爲您提供bash的強大功能。用戶超過10年,遇到很小的問題。 – user151841 2014-12-03 02:02:53