svn svn使用 - 如何解決“本地編輯,更新時傳入刪除”消息




svn是什麼 download (7)

當我做一個svn status . ,我明白了這一點:

!     C auto-complete-config.elc
      >   local edit, incoming delete upon update
!  +  C auto-complete.elc
      >   local edit, incoming delete upon update
!  +  C popup.elc
      >   local edit, incoming delete upon update
!  +  C fuzzy.elc
      >   local edit, incoming delete upon update

基本上,這些文件不應該在存儲庫中。 開發人員已將其刪除。 然後,我認為我做了一個svn rm ...之後的錯誤(應該已經完成了svn update . )。

所以,現在,當我做svn status . ,我得到這些樹衝突消息。

我在here找到了文檔here但不知道如何根據文檔“合併”它。

如何擺脫他們?

我認為我的工作副本與存儲庫同步。 不知道為什麼這些消息顯示。 據我所知,這些文件應該被移除並被刪除。 我試過svn update .svn revert . 但是當我執行svn status .時,我仍然會收到此消息svn status .


Answers

嘗試使用解決衝突

svn resolve --accept=working PATH

當我們嘗試合併另一個分支從一個錯誤的目錄更改時,經常會發生此問題。

例如:

Branch2\Branch1_SubDir$ svn merge -rStart:End Branch1
         ^^^^^^^^^^^^
   Merging at wrong location

被執行的衝突是:

Tree conflict on 'Branch1_SubDir'
   > local missing or deleted or moved away, incoming dir edit upon merge

當你選擇q退出解析時 ,你的狀態為:

 M      .
!     C Branch1_SubDir
      >   local missing or deleted or moved away, incoming dir edit upon merge
!     C Branch1_AnotherSubDir
      >   local missing or deleted or moved away, incoming dir edit upon merge

這顯然意味著合併包含與Branch1_SubDirBranch1_AnotherSubDir相關的更改,並且無法在Branch1_SubDir找到這些文件夾(顯然,目錄不能位於其內部)。

起初如何避免這個問題:

Branch2$ svn merge -rStart:End Branch1
 ^^^^
Merging at root location

針對此問題的最簡單的解決方法適用於我:

svn revert -R .

簡潔版本:

$ svn st
!  +  C foo
      >   local edit, incoming delete upon update
!  +  C bar
      >   local edit, incoming delete upon update
$ touch foo bar
$ svn revert foo bar
$ rm foo bar

如果衝突是關於目錄而不是文件,則用rm -r替換mkdirrm

注意:同樣的程序也適用於以下情況:

$ svn st
!     C foo
      >   local delete, incoming delete upon update
!     C bar
      >   local delete, incoming delete upon update

長版本:

當您在別人刪除文件並首先提交時編輯文件時會發生這種情況。 作為一名優秀的svn公民,您在提交之前進行更新。 現在你有衝突。 意識到刪除文件是正確的做法,即從工作副本中刪除文件。 現在不是內容svn現在抱怨說本地文件丟失,並且有一個衝突的更新最終想要刪除文件。 幹得好svn。

如果svn resolve ,無論出於何種原因,您可以執行以下操作:

初始狀態:本地文件丟失,更新衝突。

$ svn st
!  +  C foo
      >   local edit, incoming delete upon update
!  +  C bar
      >   local edit, incoming delete upon update

重新創建衝突的文件:

$ touch foo bar

如果衝突是關於目錄,則用mkdir替換touch

新情況:將本地文件添加到存儲庫(是的,svn,無論你說什麼),更新仍然是衝突的。

$ svn st
A  +  C foo
      >   local edit, incoming delete upon update
A  +  C bar
      >   local edit, incoming delete upon update

將文件恢復到svn喜歡的狀態(即刪除):

$ svn revert foo bar

新情況:svn不知道本地文件,更新不再衝突。

$ svn st
?       foo
?       bar

現在我們可以刪除這些文件:

$ rm foo bar

如果衝突是關於目錄,則用rm -r替換rm

svn不再抱怨:

$ svn st

完成。


您可以強制將本地目錄恢復為svn。

 svn revert -R your_local_path

因此,您可以恢復刪除的文件,但請記住,如果您正在使用設置的項目文件(如iOS)處理任何類型的項目,則恢復文件會將其添加到系統文件夾結構中,但不會添加到項目文件結構中。 如果您在這種情況下可能需要額外的步驟


如果您在衝突的目錄內沒有做任何更改,您也可以rm -rf conflicts_in_here/然後svn up 。 這至少對我有效。


檢查here描述的svn-mod-email包。 svn-mod-email是一個功能強大的SVN電子郵件通知管理工具,以Debian存檔的形式提供。 它易於安裝,配置和使用。





svn