2011-05-08 129 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文件。只要你保持清潔或適當忽視樹木,你可以快速瀏覽一下你是否有任何未跟蹤的文件。

至於事後修正此,只是階段和提交相應的變化,在這種情況下將未跟蹤文件。

相關問題