使用svn進行檔案和資料夾的忽略

heinika1476775901521發表於2017-12-14

如何使用svn忽略檔案和資料夾 如果你之前嘗試過git,你就知道svn的忽略在命令列上有多麼繁瑣。 我從事android開發,我希望svn可以這樣忽略:

# Built application files
*.apk
*.ap_

# Files for the ART/Dalvik VM
*.dex

# Java class files
*.class

# Generated files
bin/
gen/
out/

# Gradle files
.gradle/
build/

# Local configuration file (sdk path, etc)
local.properties

# Proguard folder generated by Eclipse
proguard/

# Log Files
*.log

# Android Studio Navigation editor temp files
.navigation/

# Android Studio captures folder
captures/

# Intellij
*.iml
.idea/workspace.xml
.idea/libraries

# Keystore files
*.jks
複製程式碼

我本以為svn的忽略會很簡單,但實際上達到最終的忽略效果花掉了我相當長的時間。所以在這做個記錄,將我的經驗分享一下。

SVN的ignore屬性

svn通過屬性來判斷如何處理倉庫中的檔案。其中有一個屬性便是svn:ignore。你可以使用 svn propset 來設定svn:ignore在單獨的目錄。你可以給svn:ignore設定一個值,檔名或者是表示式。 例如:

svn propset svn:ignore *.class .
複製程式碼

這時你使用svn status命令,就看不到。class檔案了。如果你也想檢視忽略的檔案,你可以輸入:

svn status --no-ignore
複製程式碼

忽略資料夾

忽略資料夾,千萬不要加斜槓。

svn propset svn:ignore bin . # yes  
svn propset svn:ignore /bin . # nope   
 svn propset svn:ignore bin/ . # nope
複製程式碼

使用 —R 遞迴屬性配置

使用上面的方法只能忽略當前目錄,如果你想要自己的子資料夾也進行忽略 要使用-R驚醒操作。

svn propset svn:ignore -R *.class .
複製程式碼

忽略多種型別的檔案

通過以下的命令你可以忽略 *.class,*.apk, and Thumbs.db

svn propset svn:ignore -R *.class .  
svn propset svn:ignore -R *.apk .   
svn propset svn:ignore -R Thumbs.db .
複製程式碼

或者,你可以這樣:

svn propset svn:ignore -R "*.class
> *.apk
> Thumbs.db" .
複製程式碼

使用-F通過配置檔案來忽略

如android的,eclipse工程中需要忽略一些檔案。 於是新建一個文字文件.svnignore並在其中寫入:

build
bin  
gen  
proguard  
.classpath  
.project  
local.properties  
Thumbs.db  
*.apk  
*.ap_  
*.class  
*.dex
複製程式碼

然後執行:

svn propset svn:ignore -R -F .svnignore .
複製程式碼

全域性忽略完成。

注意事項

進行上述步驟之後,每個資料夾內的bin,gen等目錄都會被忽略。所以起名字的時候不要起和忽略的名字相同的檔案。

對忽略進行檢視,刪除

檢視全部

svn status --no-ignore
複製程式碼

檢視指定目錄

svn proplist -v [PATH]
複製程式碼

刪除忽略

svn status --no-ignore
複製程式碼

額你以為到這裡就結束了?

svn還有坑。。。 當你使用add的時候,千萬不要使用

svn add *
複製程式碼

這樣會把忽略中的檔案也新增到倉庫。應該使用下面的命令列代替

svn add --force .
複製程式碼

注意是點,千萬別寫成*

如果在忽略之前,檔案應經被add,應先刪除

svn delete [path]
複製程式碼

只從svn中忽略,而不刪除檔案

svn delete --keep-local [path]
複製程式碼

svn add後的資料如何 恢復/取消/還原

有時候你發現svn add後,這個提交的資料又不需要了。這時候需要有svn revert來處理了。

比如

A testcase/perday.php

如何取消呢?

svn revert testcase/perday.php

會出現下面的提示:

已恢復“testcase/perday.php”

說明指令碼已經恢復了到原來的狀態,不受SVN 版本控制了。

如何恢復整個目錄??有時候你將整個目錄都svn add了,整個目錄有不同深度的資料夾,這時候你需要用其他方式來解決

svn revert --depth=infinity .
複製程式碼

參考資料: http://stackoverflow.com/questions/116074/how-do-i-ignore-a-directory-with-svn
http://superchlorine.com/2013/08/getting-svn-to-ignore-files-and-directories/ https://www.coder4.com/archives/4244

相關文章