svn从命令行unix更新/删除/提交

时间:2015-07-28 15:32:23

标签: svn

我有奇怪的情况。 我有文件在svn存储库和本地。 修改和提交后,将创建存储库的新修订。历史遗失了。 但我知道旧版本号,所以我尝试做svn更新, 它删除了当前文件(新版本)并添加了旧文件,但我无法在SVN存储库中找到它。 当我尝试使用存储库中的修订版进行svn更新时,它会删除当前文件并从存储库中添加文件。现在我无法找到以前的版本。

svn update -r4678 TEST
D    TEST
A    TEST
Updated to revision 4678.

svn update -r285795 TEST
D    TEST
A    TEST
Updated to revision 285795.

修订版285795存在于svn存储库中,但它没有历史记录。 版本4678不是svn存储库。

我不确定我是如何陷入这种情况的。

我希望将带有修订版4678的文件添加到存储库,并在其上添加新版本285795。

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

问题似乎是您不仅修改了文件:而是删除了旧文件并添加了新文件。即使它们具有相同的名称,对于svn,它们是两个完全不同(和不相关)的文件,因此这是您没有看到新文件的任何文件历史记录的原因(它应该来自哪里 - 它只是新创建的! )。

如果我理解正确,您希望将文件包含最新提交的内容,但保留文件的历史记录。要实现此目的,请执行以下操作:

  1. 撤消添加新文件的提交我反向合并它(即svn merge -c -REV filename,不要忘记修订号之前的破折号)并提交。您现在应该使用旧文件(包括历史记录)获得干净的工作副本。
  2. 获取旧文件和新文件之间的更改(例如,使用diff)并将它们直接应用于工作副本中的文件。不要做svn delete/add,只需修改文件即可。如果执行svn st,您现在应该在文件状态的第一列中看到大写M
  3. 确认该文件的内容与之前错误提交的文件的新版本相同(即,如果您在文件之间进行差异,则应该显示为空)
  4. 提交文件。
  5. 您最终将保留新文件的内容和旧文件的历史记录。