簡體   English   中英

SVN中checkout和export的區別

[英]Difference between checkout and export in SVN

SVN 結帳和 SVN 導出之間的確切區別是什么?

據我所知,導出不包括包含元數據的 .svn 目錄,而結帳包含該 .svn 目錄。 然而,我的同事最近遇到了這個問題,即從 SVN 存儲庫檢出和導出的源編譯的東西有不同的行為。 兩者都編譯正確,但是從svn export編譯的一個有效,但檢出的一個根本不起作用。

PS:正在編譯的東西是在嵌入式設備中使用的 Linux 2.4 內核。 圖像編譯並正確加載,但檢出的圖像不起作用。 它會在 insmod 期間導致內核崩潰。 為什么會發生這種情況?

PPS:我們嘗試了校驗和和差異工具來檢查從 SVN 導出和檢出的兩個目錄之間的差異。 除了 .svn 目錄外,它們都是相同的。

svn export只是從修訂版中提取所有文件,並且不允許對其進行修訂控制。 它也不會用 .svn 目錄亂扔每個目錄。

svn checkout允許您在創建的目錄中使用版本控制,例如您的標准命令,例如svn updatesvn commit

正如您所說,結帳包括 .svn 目錄。 因此,它是一個工作副本,並且將具有正確的信息來進行提交(如果您有權限)。 如果您進行導出,您只是獲取存儲庫當前狀態的副本,並且無法提交任何更改。

您是重新運行結帳還是導出到現有目錄?

因為如果是,checkout 將更新工作副本,包括刪除任何文件。

但是導出只會將所有文件從存儲庫傳輸到目標 - 如果目標是同一目錄,這意味着存儲庫中刪除的任何文件都不會被刪除。

因此,您導出副本可能僅起作用,因為它依賴於已在存儲庫中刪除的文件?

構建過程是否有可能查看子目錄並包含不應該包含的內容? 順便說一句,您可以進行合法結帳,然后刪除 .svn 及其包含的所有內容。 那應該給你和出口一樣的東西。 嘗試在刪除元數據之前和之后編譯它,就像它一樣。

如果您想上傳(或提供給某人)項目,請使用導出。 如果您正在處理一個項目,請使用 checkout。

(補充傑拉德的回答......)另一個細微的區別是,盡管命令:

svn checkout ...repos_location/my_dir .

my_dir的文件放入當前目錄(帶有.svn文件夾)

在某些版本的 svn 中,命令:

svn export ...repos_location/my_dir .

將在當前目錄中創建一個名為my_dir的文件夾,然后將導出的文件放入其中。

額外的思考。 你說 insmod 崩潰了。 Insmod 加載模塊。 這些模塊是在構建內核的另一個編譯操作中構建的。 內核和模塊必須從相同的頭文件等構建。 所有模塊都是在內核構建期間構建的,還是“存在”的?

另一個想法,我知之甚少,是 svn externals,它(如果使用)會影響檢出到您的項目的內容。 看看這在導出時是否有任何不同。

非常簡單的區別,如果您只想查看項目的結構,請進行導出。

如果你想處理你的文件,那么你需要簽出,因為它將包含 .svn 文件夾,其中包含制作工作副本的元數據,否則你會在導出時出錯。

如果你做svn export然后編輯一些文件然后提交,那么你會得到一個錯誤:

../../xxx 不是您的工作副本。

如果您使用的是 tortoise svn 客戶端 - 導出時 - 它顯示 ..export / checkout ,令人困惑,它只是導出。 僅查看/閱讀使用 export ,提交使用 - “結帳”

暫無
暫無

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

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