如何使用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