我如何的所有版本的文件,使用“svn添加” SVN?我如何的所有版本的文件,使用“svn添加” SV

2019-05-14 10:54发布

我在寻找自动在工作副本“SVN添加”所有版本的文件,我的SVN仓库的好方法。

我有一个可以创建一些文件,应该是源控制下的直播服务器。 我想有我可以运行自动添加的,而不是经历并增加他们每次一个这些,很短的脚本。

我的服务器运行的是Windows Server 2003的这样一个Unix的解决方案将无法工作。

Answer 1:

svn add --force * --auto-props --parents --depth infinity -q

伟大的小费! 一注:我的Eclipse会自动添加新文件到忽略列表。 这可能是配置的问题,但无论如何:还有就是--no-ignore选项帮助。

在此之后,你可以提交:

svn commit -m 'Adding a file'


Answer 2:

这是一个不同的问题,以我的 ,但有关于这个问题的所属的答案有:

svn status | grep '?' | sed 's/^.* /svn add /' | bash


Answer 3:

什么工作是这样的:

c:\work\repo1>svn add . --force

添加子目录的内容。

不添加忽略的文件。

添加了什么文件列表。

该命令中的点表示当前目录,这可以通过一个特定的目录名或路径取代,如果要添加不同的目录比当前。



Answer 4:

这为我工作:

svn add `svn status . | grep "^?" | awk '{print $2}'`

( 来源 )

当你已经解决您的问题适用于Windows,这是一个UNIX解决方案(以下SAM)。 我这里补充,因为我认为它仍然是为那些谁达到这个问题,问同样的事情(如标题不包含关键字“WINDOWS”)是有用的。

(2月,2015):作为评价用“bdrx”,上述命令可以以这种方式被进一步简化:

 svn add `svn status . | awk '/^[?]/{print $2}'`


Answer 5:

此方法应处理其有空格的任何数量/组合文件名...

svn status /home/websites/website1 | grep -Z "^?" | sed s/^?// | sed s/[[:space:]]*// | xargs -i svn add \"{}\"

下面是该命令所做的解释:

  • 列出所有修改过的文件。
  • 限制此列表,用线“?” 在开始 - 即新文件。
  • 除掉 '?' 字符在该行的开头。
  • 在该行的开头删除空格。
  • 管文件名到xargs的运行SVN多次添加。

使用-i参数xargs的处理能够与空间为“SVN添加”导入文件名 - 基本上,-i集{}用作占位符,所以我们可以把周围的“SVN使用的文件名的“字符加'。

这种方法的优点是,这应该处理文件名包含空格。



Answer 6:

TortoiseSVN的具有此功能内置,如果你愿意使用非命令行的解决方案。 只需右键单击顶级文件夹,然后选择添加 ...



Answer 7:

svn add --force .

这会在当前目录和所有版本的子目录添加任何版本的文件。



Answer 8:

这是作为在案的svn书,最简单和作品非常适合我

svn add * --force

http://svnbook.red-bean.com/en/1.6/svn.ref.svn.c.add.html



Answer 9:

使用:

svn st | grep ? | cut -d? -f2 | xargs svn add


Answer 10:

我总是用:

复制粘贴

svn st | grep "^\?" | awk "{print \$2}" | xargs svn add $1


Answer 11:

由于这个帖子被标记的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


Answer 12:

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"


Answer 13:

如果你使用Linux或Windows中使用Cygwin MinGW的或者你可以使用bash类似的解决方案,如以下。 这里的其它相似的人对比,这其中考虑到文件的命名空间:

svn status| grep ^? | while read line ; do  svn add "`echo $line|cut --complement -c 1,2`" ;done


Answer 14:

花一些时间试图找出如何递归只添加一些文件后,我认为这将是有效的分享,我所做的工作:

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"

这里去一些解释。

第一条命令将所有目录。 第二个命令相应增加仅将文件设置为指定的模式。

让我提供更多的细节:

  • 适用于:你知道的,闭环控制。
  • / F:是指把文件和目录(不知道到底)。
  • %F:其可变; 它会假设每一次列出的文件的价值; 它可能有另外一个字符名称。
  • IN:没有必要解释,对吗?
  • ( 'DIR / S / B / A:d'):DOS命令,将列出的目录; 在我的情况/ s的是递归的,/ B是只取完整的路径,/ A:d意味着只有目录; 改变它,你想保持括号和省略号。
  • DO:意味着在命令接下来会是什么将为每个目录执行
  • SVN添加--depth =空:它是所希望的SVN突击要运行; 深度定义是指增加内他们只有目录,而不是文件。
  • “%F”:这是你如何使用先前定义的变量。

在第二个命令,唯一的区别是dir命令和svn命令,我认为这是非常明显的。



Answer 15:

您可以使用命令

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忽略 - > *(递归),然后承诺这一点。

您可以检查日志,看看谁犯下的性能变化,找出他们实际上是试图做的,并要求他们在未来更加小心。 :)



Answer 16:

您可以输入在Linux下面的命令:

find ./ -name "*." | xargs svn add


Answer 17:

由于他指定的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"


Answer 18:

我觉得我已经做了类似的东西有:

svn add . --recursive

但不知道如果我的记忆是正确的;-p



文章来源: How do I 'svn add' all unversioned files to SVN?