在构建我的c#项目之后,我有一个构建后的脚本,它将一个dll文件放在一个特定的目录中。此dll保存在SVN中。我的问题是,有没有一种方法,在构建我的项目时,它知道这个DLL没有改变,并且知道不会被复制到目录,所以不会有SVN的修改副本?
答案 0 :(得分:1)
为什么要将你构建的dll放入svn?
修改
你应该找到一个更好的方法来做到这一点 - 例如在开发人员可以获取你的DLL的地方安装一个安装程序或ftp服务器。将您的派生作品放入svn是一个非常糟糕的主意。特别糟糕。
答案 1 :(得分:0)
快速简便的方法是对两个文件进行统计并比较它们的修改时间 - 如果目标目录中的DLL早于您要复制的DLL,则只复制文件。
更强大但更慢的方法是使用任意数量的diff程序来逐字节地比较两个DLL。
答案 2 :(得分:0)
除非我误解你的问题,否则你无需做任何事情。如果文件未被修改,SVN知道这一点并且不会提交。
修改强> 你已经澄清了蒂姆的答案,你这样做是为了拯救其他开发者的建设麻烦。这是错误的方式。源控件不应用于保存作为源输出的二进制文件。相反,你应该:
答案 3 :(得分:0)
SVN应该已经为您解决了这个问题。如果文件之间确实没有差异,并且您将其替换为另一个文件,则SVN将不会认为该文件被“修改”,即使它具有新的时间戳。 SVN保留文件的基本修订版,并使用diff本身来查看需要提交的文件。所以你可以随时复制dll,SVN将负责其余的工作。
答案 4 :(得分:0)
尝试提交,看看SVN是否同意您的图形界面。
如果它试图提交,那么无论构建文件是什么,每次都包含一些不同的信息(可能是时间戳或其他东西)。您可能希望实际提交,因为该文件不同。您可以检查编译选项以查看它是否包含某种时间戳,但如果您找不到这样的选项,则很难判断dll的更改是否有意义或只是某些编译器元数据
答案 5 :(得分:0)
将二进制文件检入subversion是可以的。原因是下游用户(QA或用户)可能没有从源代码构建的环境。他们对源代码构建也不感兴趣。
此处的问题是楼宇管理问题 - 当您发布该DLL时,如果QA发现您的DLL有问题,如何追溯到源。
时间戳不是一种可靠的方法。
为此目的,您需要在建筑物管理方面拥有一些东西。在我的项目中,我们的构建脚本找到所涉及文件的最大修订版号(请注意,这不是当前的修订版号,因为您应该能够在将来构建但产生相同的结果)。然后它将此数字标记到DLL的版本资源。在我们对结果感到满意后,我们通过手动将二进制文件复制到subversion中的文件夹并签入来释放它。
如果QA发现错误,我们总是可以回到构建DLL的状态(通过查找版本号)并找出问题所在。