提交尚未检出的文件
Committing a file that has not been checked out
我是 SVN 的新手,多年来一直使用 SourceSafe 和自制解决方案。
我们都完成了,我有很多编辑过的文件没有先签出。有什么办法可以:
- 尽管文件未被签出,但仍强制提交
- 在不覆盖我修改过的文件的情况下结帐
- 另一种方法?
我用的是 TortoiseSVN。
SourceSafe 和 SVN 使用不同的术语。在 SourceSafe 中所谓的 "checkout" 在 SVN 中被称为 locking a file.
但是 SVN(通常)不要求您锁定文件才能对其进行处理,因为它使用乐观锁定方法。也就是说,它假定文件在提交时将是 merge-able。这通常适用于纯文本文件,如果两个人对同一文件的同一部分进行了更改,则需要手动合并。
这是比 VSS 模型好多的工作方式,因为这意味着您不会在其他人休假时被锁定在文件之外。
您真的应该阅读 Part I of the Subversion manual 以确保您了解 Subversion 的操作模型。如果你试图像 VSS 一样使用它,它会受到伤害。
使用 Subversion "checkout" 只是将存储库的一部分复制到您的工作站以进行更改。它不会更改存储库的状态,也不会专门为您的文件锁定文件使用。
所以你的操作应该是:
- 签出一份工作副本(如果您已有一份,请更新它)
- 进行更改
- 提交
- 重复
简而言之,签出一个新的工作副本以获取一个最新的 .svn 文件夹,然后将文件夹内容替换为您的本地活动工作副本,并提交差异。
如果你在本地添加的文件与添加到svn仓库的版本完全一样,并且文件是文本文件(即不是二进制文件),只需要svn update
和本地文件将被 svn "versioned"(识别为在当前存储库版本级别存在并正确)。
如果本地文件不同并且是文本文件,svn update
应该再次对文件进行版本控制,之后您可以svn commit
进行更改。
如有疑问,请先在本地复制版本化文件夹,然后看看会发生什么。如果你有备份,你就不会造成任何伤害。
但是,最安全的方法是签出相关文件夹的新副本。然后删除该文件夹中的所有内容(不是 svn delete
!),除了 .svn
文件夹。因为你有 TortoiseSVN,你可能正在使用 Windows,所以我的意思是在资源管理器中,select 除 .svn
之外的所有内容,然后按 Delete .然后将您的工作文件和文件夹复制到文件夹中并提交更改。您可能想知道这是如何工作的 - .svn
文件夹包含文件的原始副本,因为它们存在于远程存储库中,因此能够比较您的本地工作文件和文件夹以找出发生了什么变化。
当您 commit 时,请务必勾选框 "Show unversioned files" 以包含本地创建的尚未版本化的任何新文件,然后单击 "All" 以包含所有更改,包括您的提交中的任何新文件。
我是 SVN 的新手,多年来一直使用 SourceSafe 和自制解决方案。
我们都完成了,我有很多编辑过的文件没有先签出。有什么办法可以:
- 尽管文件未被签出,但仍强制提交
- 在不覆盖我修改过的文件的情况下结帐
- 另一种方法?
我用的是 TortoiseSVN。
SourceSafe 和 SVN 使用不同的术语。在 SourceSafe 中所谓的 "checkout" 在 SVN 中被称为 locking a file.
但是 SVN(通常)不要求您锁定文件才能对其进行处理,因为它使用乐观锁定方法。也就是说,它假定文件在提交时将是 merge-able。这通常适用于纯文本文件,如果两个人对同一文件的同一部分进行了更改,则需要手动合并。
这是比 VSS 模型好多的工作方式,因为这意味着您不会在其他人休假时被锁定在文件之外。
您真的应该阅读 Part I of the Subversion manual 以确保您了解 Subversion 的操作模型。如果你试图像 VSS 一样使用它,它会受到伤害。
使用 Subversion "checkout" 只是将存储库的一部分复制到您的工作站以进行更改。它不会更改存储库的状态,也不会专门为您的文件锁定文件使用。
所以你的操作应该是:
- 签出一份工作副本(如果您已有一份,请更新它)
- 进行更改
- 提交
- 重复
简而言之,签出一个新的工作副本以获取一个最新的 .svn 文件夹,然后将文件夹内容替换为您的本地活动工作副本,并提交差异。
如果你在本地添加的文件与添加到svn仓库的版本完全一样,并且文件是文本文件(即不是二进制文件),只需要svn update
和本地文件将被 svn "versioned"(识别为在当前存储库版本级别存在并正确)。
如果本地文件不同并且是文本文件,svn update
应该再次对文件进行版本控制,之后您可以svn commit
进行更改。
如有疑问,请先在本地复制版本化文件夹,然后看看会发生什么。如果你有备份,你就不会造成任何伤害。
但是,最安全的方法是签出相关文件夹的新副本。然后删除该文件夹中的所有内容(不是 svn delete
!),除了 .svn
文件夹。因为你有 TortoiseSVN,你可能正在使用 Windows,所以我的意思是在资源管理器中,select 除 .svn
之外的所有内容,然后按 Delete .然后将您的工作文件和文件夹复制到文件夹中并提交更改。您可能想知道这是如何工作的 - .svn
文件夹包含文件的原始副本,因为它们存在于远程存储库中,因此能够比较您的本地工作文件和文件夹以找出发生了什么变化。
当您 commit 时,请务必勾选框 "Show unversioned files" 以包含本地创建的尚未版本化的任何新文件,然后单击 "All" 以包含所有更改,包括您的提交中的任何新文件。