2011-05-08 126 views
0

当使用SVN或Git项目的签出副本的工作,我经常删除或不使用相应的git mvsvn renamegit rm,或svn delete命令重命名文件,所以这些变化不会适当地反映在我将我的版本提交回存储库。在事实发生之后,是否有一种解决方法可以解决这个问题,除了在我的最后更加谨慎?删除和重命名文件

回答

4

对于Git的,看看git add -A。这将添加新的或已更改的所有内容,以及删除不存在的文件。不过,它可能还会添加您不想添加的文件,因此请小心。 由于Git并不跟踪重命名明确,这已经足够了(用git commit在一起)。

对于Subversion,您可以执行类似svn add --force .的操作,然后执行svn commit等效操作,但这不会正确地跟踪重命名/移动操作。我认为找出哪些文件被重命名(也可能更改)以及哪些文件被简单地添加/删除并不是微不足道的。

+0

不幸的是,它会增加不必要的文件,但我想混帐不能聪明(还)。 – hatmatrix 2011-05-09 10:00:58

+0

如果你有一些匹配这些不需要的文件的模式,把它们放在'.gitignore'(或'.git/info/exclude')中,它们不会自动添加。 – 2011-05-09 11:11:47

1

对于git的,一旦你删除一个文件,使用:

git rm --cached myfile 
+0

我一定要去找我删除哪些以及每个文件中手动做到这一点? – hatmatrix 2011-05-08 01:39:29

+0

必须有一个聪明的办法,一气呵成,git非常强大,但我不知道它。 – Simon 2011-05-08 01:41:18

+0

谢谢 - 这正是我所希望的。否则,我也可以对我删除的文件执行'git rm'(即使文件不存在)。 – hatmatrix 2011-05-08 01:43:34

1

Git中,如果你已删除的文件,你可以使用git commit -a并承诺将反映删除,而不必做git rm

像TortoiseSVN和TortoiseGit这样的Gui工具对于这样的事情很聪明,而且在使用这些工具时通常不需要进行显式删除和重命名。

+0

感谢 - 我用'git的承诺-a'但似乎并没有删除我的旧文件... – hatmatrix 2011-05-09 09:59:56

2

使用git,git mv只是一个方便的别名,相当于在旧文件上移动文件并对git rm执行操作。如果你省略了这个,结果是你删除了原始文件,git会注意到,并添加了一个新文件,git将忽略,因为你没有调用git addgit rm与此类似。

这是混帐的缺点之一,因为它不强迫你犯在你的仓库其他版本控制系统做的每一个变化。但是,可以使用git status命令轻松管理它,并仔细使用.gitignore文件。只要你保持清洁或适当忽视树木,你可以快速浏览一下你是否有任何未跟踪的文件。

至于事后修正此,只是阶段和提交相应的变化,在这种情况下将未跟踪文件。

相关问题