这是我们遇到的问题:
开发人员将在他的沙箱中检出主干。我们创建了一个切换脚本来将某些文件切换到正在进行更改的分支。有时切换脚本似乎失败了,开发人员检查了他的更改。这些更改显示在修订日志中,但我们无法确定它们是否被签入分支或主干。他们似乎迷失在开发者的盒子上。这会导致很多来回切换,并且通常当它是一个很小的变化时,它就会被重新编码。
所以我的问题是,我们如何才能知道修订被签入了哪个分支?
这是我们遇到的问题:
开发人员将在他的沙箱中检出主干。我们创建了一个切换脚本来将某些文件切换到正在进行更改的分支。有时切换脚本似乎失败了,开发人员检查了他的更改。这些更改显示在修订日志中,但我们无法确定它们是否被签入分支或主干。他们似乎迷失在开发者的盒子上。这会导致很多来回切换,并且通常当它是一个很小的变化时,它就会被重新编码。
所以我的问题是,我们如何才能知道修订被签入了哪个分支?
使用 Tortoise,我提取了我修改过的程序的日志。
我强调了行动和路径。路径向我准确显示了在哪个分支上修改了什么。
如果你没有使用 TortoiseSVN,你可以得到一个详细的 svn 日志:
svn log --verbose -r HEAD
这将显示提交中所有文件的 svn 位置(就像@Gilbert Le Blanc 的回答一样)。下面的示例输出。HEAD
如果您需要不同的内容,请更改为特定版本。
------------------------------------------------------------------------
r556 | USER | 2012-08-30 13:37:35 -0500 (Thu, 30 Aug 2012) | 1 line
Changed paths:
M /trunk/Path/File.cs
Commit Comment
------------------------------------------------------------------------
修订是每棵树,所以首先你需要获得修订的“更改”
svn diff -r <start revision>:<end revision> --summarize <root svn URL>
这可能会产生输出,例如
A file:///home/xxx/svn/yyy/trunk/src/main/java/com/proj/App.java
A file:///home/xxx/svn/yyy/trunk/src/main/java/com/proj
A file:///home/xxx/svn/yyy/trunk/src/main/java/com
A file:///home/xx/svn/yyy/trunk/src/main/java
A file:///home/xxx/svn/yyy/trunk/src/main
A file:///home/xxx/svn/yyy/trunk/src
A file:///home/xxx/svn/yyy/trunk/pom.xml
M file:///home/xxx/svn/yyy/trunk
分支在 SVN 中被实现为目录,因此您需要确定项目的根目录,以及哪些直接子目录被视为(按照惯例)“分支”
在上面的例子中
file:///home/xxx/svn/yyy/
被认为是项目的“根”url,所以从
file:///home/xxx/svn/yyy/trunk
告诉我它签入的“分支”是
trunk
请注意,其他项目已签入
trunk/src/main/java/com
但按照我的惯例,这不是一个分支。由于决定什么是分支是传统的,因此最后确定哪些分支受到影响将需要了解您的特定 SVN 设置。就我而言
branches/branchA
我自己认为是一个分支(对于我的项目),但是
branches/branchA/src
不被视为分支。