我在寻找自动在工作副本“SVN添加”所有版本的文件,我的SVN仓库的好方法。
我有一个可以创建一些文件,应该是源控制下的直播服务器。 我想有我可以运行自动添加的,而不是经历并增加他们每次一个这些,很短的脚本。
我的服务器运行的是Windows Server 2003的这样一个Unix的解决方案将无法工作。
我在寻找自动在工作副本“SVN添加”所有版本的文件,我的SVN仓库的好方法。
我有一个可以创建一些文件,应该是源控制下的直播服务器。 我想有我可以运行自动添加的,而不是经历并增加他们每次一个这些,很短的脚本。
我的服务器运行的是Windows Server 2003的这样一个Unix的解决方案将无法工作。
svn add --force * --auto-props --parents --depth infinity -q
伟大的小费! 一注:我的Eclipse会自动添加新文件到忽略列表。 这可能是配置的问题,但无论如何:还有就是--no-ignore
选项帮助。
在此之后,你可以提交:
svn commit -m 'Adding a file'
这是一个不同的问题,以我的 ,但有关于这个问题的所属的答案有:
svn status | grep '?' | sed 's/^.* /svn add /' | bash
什么工作是这样的:
c:\work\repo1>svn add . --force
添加子目录的内容。
不添加忽略的文件。
添加了什么文件列表。
该命令中的点表示当前目录,这可以通过一个特定的目录名或路径取代,如果要添加不同的目录比当前。
这为我工作:
svn add `svn status . | grep "^?" | awk '{print $2}'`
( 来源 )
当你已经解决您的问题适用于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 \"{}\"
下面是该命令所做的解释:
使用-i参数xargs的处理能够与空间为“SVN添加”导入文件名 - 基本上,-i集{}用作占位符,所以我们可以把周围的“SVN使用的文件名的“字符加'。
这种方法的优点是,这应该处理文件名包含空格。
TortoiseSVN的具有此功能内置,如果你愿意使用非命令行的解决方案。 只需右键单击顶级文件夹,然后选择添加 ...
svn add --force .
这会在当前目录和所有版本的子目录添加任何版本的文件。
这是作为在案的svn书,最简单和作品非常适合我
svn add * --force
http://svnbook.red-bean.com/en/1.6/svn.ref.svn.c.add.html
使用:
svn st | grep ? | cut -d? -f2 | xargs svn add
我总是用:
复制粘贴
svn st | grep "^\?" | awk "{print \$2}" | xargs svn add $1
由于这个帖子被标记的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 "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"
如果你使用Linux或Windows中使用Cygwin MinGW的或者你可以使用bash类似的解决方案,如以下。 这里的其它相似的人对比,这其中考虑到文件的命名空间:
svn status| grep ^? | while read line ; do svn add "`echo $line|cut --complement -c 1,2`" ;done
花一些时间试图找出如何递归只添加一些文件后,我认为这将是有效的分享,我所做的工作:
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命令,我认为这是非常明显的。
您可以使用命令
svn add * force--
要么
svn add <directory/file name>
递归将是默认属性 。 你可以看到SVN书 。
问题可以在你的忽略列表或全局属性。
我得到了解决谷歌问题跟踪
TortoiseSVN > Properties
。 svn:global-ignores with a value of *
star(*)
那么它会忽略递归增加。 因此,除去此属性。 TortoiseSVN > Settings > General
。 star(*)
删除此属性。 这家伙也解释了为什么这个属性在我的项目加入。
最喜欢的方式,它到了那里是有人右键单击某个文件没有任何扩展,选择TortoiseSVN的 - > SVN忽略 - > *(递归),然后承诺这一点。
您可以检查日志,看看谁犯下的性能变化,找出他们实际上是试图做的,并要求他们在未来更加小心。 :)
您可以输入在Linux下面的命令:
find ./ -name "*." | xargs svn add
由于他指定的Windows,其中AWK SED和不标准:
for /f "tokens=1*" %e in ('svn status^|findstr "^\?"') do svn add "%f"
或在一个批处理文件:
for /f "tokens=1*" %%e in ('svn status^|findstr "^\?"') do svn add "%%f"
我觉得我已经做了类似的东西有:
svn add . --recursive
但不知道如果我的记忆是正确的;-p