问题是svn on commit添加了尚未更新的其他文件。
示例:
svn st
这表示file1
已更改
svn commit
这会上传file1
以及file2, file3, file4
这总是发生在同一个文件
file2, file3, file4
我该怎么办?
SVN版本:
Subversion命令行客户端,版本1.6.6
答案 0 :(得分:1)
您使用的是哪个版本的Subversion客户端?
在pre-subversion 1.7客户端中,Subversion通过查看文件内容和.svn
目录中存储的基础来确定文件更改。 Subversion比较文件本身的属性和内容,以确定任何更改。例如:
$ svn up
U file1
U file2
U file3
在此示例中,您至少会看到以下六个文件:
.svn/text-base/file1.svn-base
.svn/text-base/file2.svn-base
.svn/text-base/file3.svn-base
.svn/prop-base/file1
.svn/prop-base/file2
.svn/prop-base/file3
它不会查看时间戳来确定文件是否已更改(如Makefile所有)。
svn up
和svn commit
都使用相同的算法来确定是否应将文件记录为已修改。
还有一个名为.svn/entries
的文件,其中包含目录所具有的条目列表。这允许Subversion跟踪添加和删除,但它不用于检测更改。
我在合并期间看到了提交未更改文件的问题。但是,这在执行svn status
时始终显示,文件内容未更改,但属性svn:merge info
为。
您的问题似乎非常不同。首先,在执行svn status
时,您没有看到更改,但它们确实已提交。如果您在目录上执行svn -v log
该怎么办?文件是否显示为已更改?如果你做svn status -v
怎么办?这将显示所有文件,包括被忽略的文件和尚未更改的文件。
客户端告诉服务器哪些文件已被更改,而不是服务器确定要提交哪些文件。因此,问题在于您的Subversion客户端:
您的Subversion客户端是什么?您拥有什么操作系统?我知道Cgywin可能会有问题 - 特别是如果你与Windows Subversion客户端共享你的工作目录。在两种不同类型的客户端(如GUI客户端和命令行客户端)之间共享工作目录可能存在一些问题。例如,VisualStudio的AnkhSvn客户端创建_svn
目录。 TortoiseSVN可以使用它们(如果你正确配置),但不能使用标准的Subversion命令行。
当然,1.7命令行客户端与早期的命令行客户端不同。在标准1.7命令行客户端中,.svn
目录仅在根目录中,我相信它使用校验和来确定文件的内容是否已更改。
抱歉,我无法提供任何进一步的帮助。也许我给你一些东西继续?让我知道您的Subversion客户端和操作系统,这可能会有所帮助。如果您在同一目录中使用多个Subversion客户端,也请告诉我。这也许是一个线索。
我已经尝试进入$HOME/.subversion/conf
,看看是否有任何设置可能有所作为,但我发现没有任何可能导致此行为。
答案 1 :(得分:0)
好吧,如果你想永远忽略你可以使用svn:ignore的文件,但是如果它们是你有时会改变的文件,你需要让它们处于源代码管理下,我会做svn diff file1
然后去从那里。它们是什么类型的文件以及diff的结果是什么?