it-swarm-vi.tech

Làm cách nào để bỏ qua các tệp trong Subversion?

Làm cách nào để bỏ qua các tệp trong Subversion?

Ngoài ra, làm cách nào để tìm các tệp không thuộc kiểm soát phiên bản?

589
andyuk

(Câu trả lời này đã được cập nhật để phù hợp với hành vi của SVN 1.8 và 1.9)

Bạn có 2 câu hỏi:

Đánh dấu các tập tin là bỏ qua:

Bởi "tập tin bị bỏ qua" Tôi có nghĩa là tập tin sẽ không xuất hiện trong danh sách ngay cả khi "không đảo ngược": ứng dụng khách SVN của bạn sẽ giả vờ rằng tập tin hoàn toàn không tồn tại trong hệ thống tập tin.

Các tập tin bị bỏ qua được chỉ định bởi một "mẫu tập tin". Cú pháp và định dạng của các mẫu tệp được giải thích trong tài liệu trực tuyến của SVN: http://svnbook.red-bean.com/nightly/en/svn.advified.props.special.ignore.html "Các mẫu tệp trong Subversion ".

Subversion, kể từ phiên bản 1.8 (tháng 6 năm 2013) trở lên, hỗ trợ 3 cách khác nhau để chỉ định các mẫu tệp. Dưới đây là một bản tóm tắt với các ví dụ:

1 - Khu vực cấu hình thời gian chạy - tùy chọn global-ignores:

  • Đây là cài đặt chỉ phía máy khách, vì vậy danh sách global-ignores của bạn sẽ không được chia sẻ bởi những người dùng khác và nó áp dụng cho tất cả các repos bạn kiểm tra trên máy tính của bạn.
  • Cài đặt này được xác định trong tệp Khu vực cấu hình thời gian chạy của bạn:
    • Windows (dựa trên tệp) - C:\Users\{you}\AppData\Roaming\Subversion\config
    • Windows (dựa trên đăng ký) - Software\Tigris.org\Subversion\Config\Miscellany\global-ignores trong cả HKLMHKCU.
    • Linux/Unix - ~/.Subversion/config

2 - Thuộc tính svn:ignore, được đặt trên các thư mục (không phải tệp):

  • Điều này được lưu trữ trong repo, vì vậy những người dùng khác sẽ có cùng các tệp bỏ qua. Tương tự như cách hoạt động của .gitignore.
  • svn:ignore được áp dụng cho các thư mục và không được đệ quy hoặc kế thừa. Mọi tệp hoặc ngay lập tức thư mục con của thư mục mẹ phù hợp với Mẫu tệp sẽ bị loại trừ.
  • Trong khi SVN 1.8 thêm khái niệm "thuộc tính được kế thừa", thì chính thuộc tính svn:ignore bị bỏ qua trong các thư mục con cháu không ngay lập tức:

    cd ~/myRepoRoot                             # Open an existing repo.
    echo "foo" > "ignoreThis.txt"                # Create a file called "ignoreThis.txt".
    
    svn status                                  # Check to see if the file is ignored or not.
    > ?    ./ignoreThis.txt
    > 1 unversioned file                        # ...it is NOT currently ignored.
    
    svn propset svn:ignore "ignoreThis.txt" .   # Apply the svn:ignore property to the "myRepoRoot" directory.
    svn status
    > 0 unversioned files                       # ...but now the file is ignored!
    
    cd subdirectory                             # now open a subdirectory.
    echo "foo" > "ignoreThis.txt"                # create another file named "ignoreThis.txt".
    
    svn status
    > ?    ./subdirectory/ignoreThis.txt        # ...and is is NOT ignored!
    > 1 unversioned file
    

    (Vì vậy, tệp ./subdirectory/ignoreThis không bị bỏ qua, mặc dù "ignoreThis.txt" được áp dụng trên root repo .).

  • Do đó, để áp dụng danh sách bỏ qua đệ quy, bạn phải sử dụng svn propset svn:ignore <filePattern> . --recursive.

    • Điều này sẽ tạo ra một bản sao của tài sản trên mỗi thư mục con.
    • Nếu giá trị <filePattern> khác trong thư mục con thì giá trị con hoàn toàn ghi đè lên cha mẹ, do đó không có hiệu ứng "phụ gia".
    • Vì vậy, nếu bạn thay đổi <filePattern> trên root ., thì bạn phải thay đổi nó bằng --recursive để ghi đè lên thư mục con và con cháu.
  • Tôi lưu ý rằng cú pháp dòng lệnh là phản trực giác.

    • Tôi đã bắt đầu giả định rằng bạn sẽ bỏ qua một tệp trong SVN bằng cách nhập một cái gì đó như svn ignore pathToFileToIgnore.txt tuy nhiên đây không phải là cách tính năng bỏ qua của SVN hoạt động.

3- Thuộc tính svn:global-ignores. Yêu cầu SVN 1.8 (tháng 6 năm 2013):

  • Điều này tương tự với svn:ignore, ngoại trừ việc nó sử dụng tính năng "thuộc tính được thừa kế" của SVN 1.8.
  • So sánh với svn:ignore, mẫu tệp được tự động áp dụng trong mọi thư mục con cháu (không chỉ con ngay lập tức) .
    • Điều này có nghĩa là không cần thiết phải đặt svn:global-ignores với cờ --recursive, vì các mẫu tệp bỏ qua được kế thừa sẽ tự động được áp dụng khi chúng được kế thừa.
  • Chạy cùng một bộ lệnh như trong ví dụ trước, nhưng sử dụng svn:global-ignores thay thế:

    cd ~/myRepoRoot                                    # Open an existing repo
    echo "foo" > "ignoreThis.txt"                       # Create a file called "ignoreThis.txt"
    svn status                                         # Check to see if the file is ignored or not
    > ?    ./ignoreThis.txt
    > 1 unversioned file                               # ...it is NOT currently ignored
    
    svn propset svn:global-ignores "ignoreThis.txt" .
    svn status
    > 0 unversioned files                              # ...but now the file is ignored!
    
    cd subdirectory                                    # now open a subdirectory
    echo "foo" > "ignoreThis.txt"                       # create another file named "ignoreThis.txt"
    svn status
    > 0 unversioned files                              # the file is ignored here too!
    

Đối với người dùng TortoiseSVN:

Toàn bộ sự sắp xếp này gây khó hiểu cho tôi, vì thuật ngữ của TortoiseSVN (như được sử dụng trong hệ thống menu Windows Explorer của họ) ban đầu gây hiểu lầm cho tôi - Tôi không chắc ý nghĩa của menu Bỏ qua "Thêm đệ quy", "Thêm *" và "Thêm" tùy chọn. Tôi hy vọng bài đăng này giải thích cách tính năng Bỏ qua liên kết với tính năng SVN Properties. Điều đó nói rằng, tôi khuyên bạn nên sử dụng dòng lệnh để đặt các tệp bị bỏ qua để bạn cảm nhận về cách thức hoạt động của nó thay vì sử dụng GUI và chỉ sử dụng GUI để thao tác các thuộc tính sau khi bạn cảm thấy thoải mái với dòng lệnh.

Liệt kê các tệp bị bỏ qua:

Lệnh svn status sẽ ẩn các tệp bị bỏ qua (nghĩa là các tệp khớp với mẫu RGA global-ignores hoặc khớp với mẫu svn:ignore của thư mục cha ngay lập tức hoặc khớp với bất kỳ mẫu svn:global-ignores nào của thư mục ancesor.

Sử dụng tùy chọn --no-ignore để xem các tệp được liệt kê. Các tệp bị bỏ qua có trạng thái I, sau đó chuyển đầu ra thành grep để chỉ hiển thị các dòng bắt đầu bằng "I".

Lệnh là:

svn status --no-ignore | grep "^I"

Ví dụ:

svn status
> ? foo                             # An unversioned file
> M modifiedFile.txt                # A versioned file that has been modified

svn status --no-ignore
> ? foo                             # An unversioned file
> I ignoreThis.txt                  # A file matching an svn:ignore pattern
> M modifiedFile.txt                # A versioned file that has been modified

svn status --no-ignore | grep "^I"
> I ignoreThis.txt                  # A file matching an svn:ignore pattern

ta-da!

690
andyuk

Sử dụng lệnh sau để tạo danh sách không thuộc tệp kiểm soát phiên bản.

svn status | grep "^\?" | awk "{print \$2}" > ignoring.txt

Sau đó chỉnh sửa tệp thành chỉ để lại các tệp bạn thực sự muốn bỏ qua . Sau đó sử dụng cái này để bỏ qua các tệp được liệt kê trong tệp:

svn propset svn:ignore -F ignoring.txt .

Lưu ý dấu chấm ở cuối dòng. Nó nói với SVN rằng thuộc tính đang được đặt trên thư mục hiện tại.

Xóa tệp:

rm ignoring.txt

Cuối cùng cam kết,

svn ci --message "ignoring some files"

Sau đó, bạn có thể kiểm tra tập tin nào bị bỏ qua thông qua:

svn proplist -v
76
ulitosCoder

Nếu bạn đang sử dụng TortoiseSVN , nhấp chuột phải vào tệp và sau đó chọn TortoiseSVN/Thêm để bỏ qua danh sách. Điều này sẽ thêm tệp/ký tự đại diện vào thuộc tính svn:ignore.

svn:ignore sẽ được kiểm tra khi bạn kiểm tra tệp và các tệp phù hợp sẽ bị bỏ qua. Tôi có danh sách bỏ qua sau đây cho một dự án Visual Studio .NET:

bin obj
*.exe
*.dll
_ReSharper
*.pdb
*.suo

Bạn có thể tìm thấy danh sách này trong menu ngữ cảnh tại TortoiseSVN/Properties.

47
artur02

Bạn có thể bỏ qua một tệp hoặc thư mục như .gitignore. Chỉ cần tạo một tệp văn bản danh sách các thư mục/tệp bạn muốn bỏ qua và chạy mã dưới đây:

svn propset svn:ignore -F ignorelist.txt .

HOẶC nếu bạn không muốn sử dụng tệp văn bản, bạn có thể làm như thế này:

svn propset svn:ignore "first
 second
 third" .

Nguồn: Blog của Karsten - Đặt svn: bỏ qua cho nhiều tệp từ dòng lệnh

36
Adrian Enriquez

Tôi tìm thấy bài viết .svnignore Ví dụ cho Java.

Ví dụ: .svnignore cho Ruby on Rails,

/log

/public/*.JPEG
/public/*.jpeg
/public/*.png
/public/*.gif

*.*~

Và sau đó:

svn propset svn:ignore -F .svnignore .

Ví dụ cho .gitignore. Bạn có thể sử dụng cho .svnignore của bạn

https://github.com/github/gitignore

21
d.danailov

Vì dường như không ai nhắc đến nó ...

svn propedit svn:ignore .

Sau đó chỉnh sửa nội dung của tệp để chỉ định các mẫu cần bỏ qua, thoát khỏi trình chỉnh sửa và bạn đã hoàn tất.

15
Yorick

Khi sử dụng propedit, đảm bảo không có bất kỳ dấu cách nào vì điều đó sẽ khiến tệp bị loại khỏi danh sách bỏ qua.

Chúng được chèn tự động nếu bạn sử dụng tab-autocomplete trên linux để tạo tệp để bắt đầu:

svn propset svn:ignore 'file1
file2' .
10
Kenneth

Một giải pháp khác là:

svn st | awk '/^?/{print $2}' > svnignore.txt && svn propget svn:ignore >> svnignore.txt && svn propset svn:ignore -F svnignore.txt . && rm svnignore.txt

hoặc từng dòng

svn st | awk '/^?/{print $2}' > svnignore.txt 
svn propget svn:ignore >> svnignore.txt 
svn propset svn:ignore -F svnignore.txt . 
rm svnignore.txt

Những gì nó làm:

  1. Nhận các tệp trạng thái từ svn
  2. Lưu tất cả các tệp với? vào tệp "svnignore.txt"
  3. Nhận các tệp đã bị bỏ qua và thêm chúng vào tệp "svnignore.txt"
  4. Yêu cầu svn bỏ qua các tệp trong "svnignore.txt"
  5. Xóa tệp
8
bkbilly

Ngoài ra, nếu bạn sử dụng Rùa SVN, bạn có thể làm điều này:

  1. Trong menu ngữ cảnh, chọn "TortoiseSVN", sau đó "Thuộc tính"
  2. Trong cửa sổ xuất hiện, nhấp vào "Mới", sau đó "Nâng cao"
  3. Trong cửa sổ xuất hiện đối diện với "Tên thuộc tính", chọn hoặc nhập "svn: bỏ qua", ngược lại với "Giá trị thuộc tính" loại tên tệp hoặc tên thư mục mong muốn (trong trường hợp của tôi là "*/target"), nhấp vào "Áp dụng tài sản đệ quy "
  4. Được. Được.
  5. Cam kết
7
msangel

Một phiên bản dễ đọc hơn của câu trả lời của bkbilly:

svn st | awk '/^?/{print $2}' > svnignore.txt
svn propget svn:ignore >> svnignore.txt
svn propset svn:ignore -F svnignore.txt .
rm svnignore.txt

Những gì nó làm:

  1. Nhận các tệp trạng thái từ svn
  2. Lưu tất cả các tệp với ? vào tệp "svnignore.txt"
  3. Nhận các tệp đã bị bỏ qua và thêm chúng vào tệp "svnignore.txt"
  4. Yêu cầu svn bỏ qua các tệp trong "svnignore.txt"
  5. Xóa tệp
5
LivingDust
  1. cd ~ /. Chuyển đổi
  2. mở cấu hình
  3. tìm dòng như 'bỏ qua toàn cầu'
  4. đặt bỏ qua loại tệp như thế này: global-ignores = * .o * .lo * .la * .al .libs * .so .so. [0-9] * .pyc * .pyo 88 * .rej ~ # #. # *. *. swp .DS_Store node_modules output
4
范陆离

SVN ignore dễ quản lý trong TortoiseSVN. Mở TortoiseSVN và nhấp chuột phải vào menu tệp, sau đó chọn Thêm vào danh sách bỏ qua.

Điều này sẽ thêm các tệp trong thuộc tính svn:ignore . Khi chúng tôi kiểm tra các tệp thì các tệp được khớp với svn:ignore sẽ bị bỏ qua và sẽ không cam kết.

Trong dự án Visual Studio, chúng tôi đã thêm các tệp sau để bỏ qua:

bin obj
*.exe
*.dll
*.pdb
*.suo

Chúng tôi đang quản lý mã nguồn trên SVN của so sánh sử dụng phương pháp này thành công

3
Slack

svn status sẽ cho bạn biết những tệp nào không có trong SVN, cũng như những gì đã thay đổi.

Nhìn vào các thuộc tính SVN cho thuộc tính bỏ qua.

Đối với tất cả mọi thứ SVN, Sách đỏ được yêu cầu đọc.

3
DGM

Bạn cũng có thể đặt mẫu bỏ qua toàn cục trong tệp cấu hình của SVN.

3
petr k.

Thêm thư mục vào Subversion và bỏ qua nội dung thư mục

svn propset svn:ignore '\*.*' .

hoặc là

svn propset svn:ignore '*' .
3
Al Conrad

Sử dụng lệnh svn status trên bản sao làm việc của bạn để hiển thị trạng thái của các tệp, các tệp chưa được kiểm soát phiên bản (và không bị bỏ qua) sẽ có dấu chấm hỏi bên cạnh chúng.

Đối với việc bỏ qua các tệp bạn cần chỉnh sửa svn: bỏ qua thuộc tính, hãy đọc chương Bỏ qua các mục không đảo ngược trong svnbook tại http://svnbook.red-bean.com/en/1.5/svn.advified.props.special. bỏ qua.html . Cuốn sách cũng mô tả thêm về việc sử dụng trạng thái svn.

2
Andreas Holstenson
  1. mở bạn sử dụng Sản phẩm JetBrains (tức là Pycharm)
  2. sau đó nhấp vào nút 'cam kết' trên thanh công cụ trên cùng hoặc sử dụng phím tắt 'ctrl + k' ảnh chụp màn hình
  3. trên giao diện cam kết, di chuyển các tệp không mong muốn của bạn sang danh sách thay đổi khác như sau . ảnh chụp màn hình_commit_change
  4. lần sau bạn chỉ có thể cam kết danh sách thay đổi mặc định.
0
G. Googol