簡體   English   中英

將文件添加到SVN,然后在提交前刪除

[英]Add files to SVN then delete before commit

我想我是粗心的。

我用svn add向svn添加了一堆文件,然后我看到svn add了一些我不想要的文件,所以我用rm刪除了它們。

現在我不能再提交,因為提交缺少文件。 我試過svn清理但它沒有幫助。

我現在的工作選擇是手動刪除每個.svn目錄,但這似乎是錯誤的。

據我了解你有這種情況:

$ touch foo
$ svn add foo
A         foo
$ rm foo
$ svn ci
svn: Commit failed (details follow):
svn: 'foo' is scheduled for addition, but is missing

所以要解決這個問題:(謝謝Linus!)

$ svn revert foo
Reverted 'foo'

或者你可以這樣做:

$ touch foo
$ svn delete --force foo

對於每個文件,您應該可以毫無問題地簽入。

如果您添加了包含子文件夾和文件的文件夾,則在提交之前刪除該文件夾。 在這種情況下,您可以執行以下操作。

$ svn revert <Deleted Folder Name> --depth infinity

這實際上是@Gonzalo Mateo的略微修改版本,它解決了我的問題。

svn st  | grep '!' | sed 's/!M      \(.*\)$/"\1"/' | xargs svn revert --depth infinity

如果您有多個目錄刪除了多個文件,則以下命令可以提供幫助:

svn st  | grep '!M' | sed 's/!M      \(.*\)$/"\1"/' | xargs svn revert

我建議先列出要還原的文件。 我們可以通過刪除最后一個管道來完成: svn st | grep '!M' | sed 's/!M \\(.*\\)$/"\\1"/' svn st | grep '!M' | sed 's/!M \\(.*\\)$/"\\1"/' svn st | grep '!M' | sed 's/!M \\(.*\\)$/"\\1"/'

一步一步的命令解釋:

  • svn st - 它用!M符號列出添加和未正確刪除的文件
  • grep '!M'它找到了帶有!M的行
  • sed 's/!M \\(.*\\)$/"\\1"/'這用於擺脫帶有空格的!M 它還會引用文件名,因此您不必擔心文件是否包含空格。
  • xargs svn revert這將還原列出的所有文件。

如果你svn add X文件,但你還沒有提交,那么以后你決定要刪除該文件(而不是提交它); 你應該簡單地用svn revert X恢復你svn add X命令。

然后它將“撤消”尚未提交的添加。

這解決了我的問題

svn st | grep '!' | sed 's/!M \\(.*\\)$/"\\1"/' | xargs svn revert --depth infinity

您應該注意的一件事是上面的代碼僅適用於最新添加的內容。 所以,如果它發出錯誤,請再做一次svn ci然后再次運行上面的代碼。 然后svn ci直到你還原了所有問題。

額外獎勵:添加別名(這適用於Oh-My-ZSH Zsh Shell)

# SVN revert everything like reset hard alias sra="svn st | grep '!' | sed 's/!M \\(.*\\)$/"\\1"/' | xargs svn revert --depth infinity"

現在sraSVN Revert All將讓您的生活變得輕松。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM