Làm cách nào để bỏ qua thư mục với SVN?


760

Tôi mới bắt đầu sử dụng SVN và tôi có một thư mục bộ đệm mà tôi không cần kiểm soát nguồn. Làm cách nào tôi có thể bỏ qua toàn bộ thư mục / thư mục với SVN?

Tôi đang sử dụng Phiên bảnTextMate trên OS X và dòng lệnh.


3
Câu hỏi tương tự được trả lời ở đây [Thư mục bỏ qua thanh toán SVN] [1] [1]: stackoverflow.com/questions/192824/svn-checkout-ignore-folder
mloskot

Có thể trùng lặp Làm thế nào để tôi bỏ qua các tệp trong Subversion? (Tôi không quan tâm quá nhiều mà đường trùng lặp đi; không tập các câu trả lời rõ ràng là tốt hơn so với người khác.)
Jeffrey Bosboom

Câu trả lời:


796

Đặt thuộc svn:ignoretính của thư mục mẹ:

svn propset svn:ignore dirname .

Nếu bạn có nhiều thứ để bỏ qua, hãy phân tách bằng dòng mới trong giá trị thuộc tính. Trong trường hợp đó, việc chỉnh sửa giá trị thuộc tính bằng trình soạn thảo bên ngoài sẽ dễ dàng hơn:

svn propedit svn:ignore .

2
@Kouber: Vấn đề của bạn là việc mở rộng shell không biết về svn: bỏ qua các thuộc tính. Vì vậy, sử dụng '*' làm tham số explomaticl chuyển tmp đến lệnh commit. Hãy thử một cái gì đó như 'svn commit -m "Thêm dấu".'
MarkusSchaber

4
Cảm ơn câu trả lời. Pico làm biên tập viên: svn propedit svn: bỏ qua. --editor-cmd pico
đã có

157
Lưu ý: Điều này sẽ không hoạt động nếu thư mục đã "trong" svn. svn rm --keep-local dirnameĐầu tiên. (Sản lượng chỉ số svn của tôi rất lớn và tôi đã va đầu vào đây một lúc.)
Erik Aronesty

10
Nếu bạn muốn bỏ qua nhiều hơn một tệp / thư mục, hãy thêm tất cả tên của chúng vào tệp txt, mỗi dòng và sử dụng biến thể sau:svn propset svn:ignore -F file.txt .
petervaz

2
Hãy cẩn thận mà bạn thiết lập svn:ignorevà không svn::ignorenhư tôi đã làm. Bạn có thể đặt các thuộc tính tùy ý, vì vậy thuộc tính sau sẽ được đặt OK và bạn có thể xem và chỉnh sửa thuộc tính, nhưng nó sẽ không khiến SVN bỏ qua các tệp bạn liệt kê.
Richard Turner

406

Đây là một cấu trúc thư mục ví dụ:

\project
    \source
    \cache
    \other

Khi trong projectbạn thấy rằng thư mục bộ đệm của bạn không được thêm vào và hiển thị như vậy.

> svn st
M  source
?  cache

Để đặt thuộc tính bỏ qua, hãy làm

svn propset svn: bỏ qua bộ đệm.

nơi svn:ignorelà tên của thuộc tính bạn đang cài đặt, cachelà giá trị của tài sản, và .là thư mục bạn đang thiết lập thuộc tính này trên. Nó phải là thư mục mẹ của cachethư mục cần thuộc tính.

Để kiểm tra các thuộc tính nào được đặt:

> svn proplist
Properties on '.':
  svn:ignore

Để xem giá trị của svn:ignore:

> svn propget svn:ignore
cache

Để xóa các thuộc tính được thiết lập trước đó:

svn propdel svn:ignore

17
Một điểm khó khăn ở đây là tôi vấp ngã. Hãy chắc chắn rằng bạn không thêm dấu gạch chéo vào dirname. Ví dụ, khi gõ svn propset svn:ignore dirname, nếu bạn cho phép trình bao (bash) điền tên dir cho bạn, nó sẽ thêm dấu gạch chéo đó, để lại cho bạn lệnh svn propset svn:ignore dirname/, không dẫn đến thư mục bị bỏ qua. Ít nhất đó là kinh nghiệm của tôi.
David Weinraub

4
Thư mục 'bộ đệm' vẫn sẽ được liệt kê trong 'svn st'. Có cách nào để loại bỏ nó khỏi tầm nhìn? (không xóa khỏi đĩa)
Tom Brito

131

Điều quan trọng cần đề cập:

Trên dòng lệnh bạn không thể sử dụng

svn add *

Điều này cũng sẽ thêm các tệp bị bỏ qua, vì dòng lệnh mở rộng *và do đó svn addtin rằng bạn muốn tất cả các tệp được thêm vào. Do đó, sử dụng cái này thay thế:

svn add --force .

làm chính xác như @binco đã nói: svn add --force *KHÔNG LÀM VIỆC . Sử dụng dấu chấm, không phải ngôi sao.
manuell

80

Vì tôi đã dành một thời gian để cố gắng làm cho nó hoạt động, nên lưu ý rằng nếu các tệp đã tồn tại trong SVN, bạn cần phải svn deletechỉnh sửa chúng, sau đó chỉnh sửa thuộc svn:ignoretính.

Tôi biết điều đó có vẻ hiển nhiên, nhưng họ cứ hiển thị như ?trong svn statusdanh sách của tôi , khi tôi nghĩ rằng nó sẽ bỏ qua chúng tại địa phương.


8
Đừng quên sử dụng tùy chọn --keep-local khi xóa các tệp nếu bạn chỉ muốn bỏ qua chúng và không thực sự xóa chúng.
Dylan Holmes

71

Để mở rộng một chút, nếu bạn đang làm điều này với công cụ dòng lệnh svn, bạn muốn gõ:

svn propedit svn:ignore path/to/dir

Nó sẽ mở trình soạn thảo văn bản bạn chọn, sau đó nhập '*' để bỏ qua mọi thứ bên trong nó và lưu + thoát - điều này sẽ bao gồm chính thư mục trong svn, nhưng bỏ qua tất cả các tệp bên trong nó, để bỏ qua thư mục, hãy sử dụng đường dẫn của cha mẹ, và sau đó nhập tên của thư mục trong tệp. Sau khi lưu, hãy chạy một bản cập nhật ('svn up'), rồi kiểm tra đường dẫn thích hợp.


8
Điểm rất tốt, cảm ơn bạn. Tất cả các câu trả lời khác bỏ lỡ trường hợp của các thư mục lồng nhau. Vì vậy, ví dụ trên (đang hoạt động), sau đó bạn nhập vào trình soạn thảo ign_directory (bằng cách giả định một cấp dưới đường dẫn / đến / dir). Điều này sẽ không hoạt động mặc dù: svn propedit svn: bỏ qua. và sau đó gõ path / to / dir / ign_directory trong trình chỉnh sửa. IOW: SVN khớp với các đối tượng một cấp xuống một lúc.
greenoldman

30

Đặt thuộc svn:ignoretính trên thư mục cha:

$ cd parentdir
$ svn ps svn:ignore . 'cachedir'

Điều này sẽ ghi đè lên bất kỳ giá trị hiện tại của svn:ignore. Bạn chỉnh sửa giá trị với:

$ svn pe svn:ignore .

Mà sẽ mở trình soạn thảo của bạn. Bạn có thể thêm nhiều mẫu, một mẫu trên mỗi dòng.

Bạn có thể xem giá trị hiện tại với:

$ svn pg svn:ignore .

Nếu bạn đang sử dụng GUI, nên có một tùy chọn menu để làm điều này.


3
svn ps svn:ignore . 'cachedir'kết quả trong cachedir is not under version control. đổi sang svn ps svn:ignore 'cachedir' .làm việc cho tôi
DiCaprio

21

Cảm ơn tất cả những đóng góp ở trên. Tôi chỉ muốn chia sẻ một số thông tin bổ sung từ kinh nghiệm của tôi trong khi bỏ qua các tập tin.


Khi các thư mục đã được kiểm soát sửa đổi

Sau khi nhập svnsvn đồng các tệp, những gì chúng ta thường làm lần đầu tiên.

Tất cả các bộ đệm thời gian chạy, thư mục đính kèm sẽ được kiểm soát phiên bản. vì vậy, trước khi svn ps svn: bỏ qua , chúng ta cần xóa nó khỏi kho lưu trữ.

Với phiên bản SVN 1.5 ở trên chúng ta có thể sử dụng svn del --keep-local your_folder, nhưng đối với phiên bản cũ hơn, giải pháp của tôi là:

  1. svn xuất một bản sao sạch các thư mục của bạn (không có .svnthư mục ẩn)
  2. svn del cục bộ và kho lưu trữ,
  3. svn ci
  4. Sao chép lại các thư mục
  5. Làm svn st và xác nhận các thư mục được gắn cờ là '?'
  6. Bây giờ chúng ta có thể làm svn ps theo các giải pháp

Khi chúng ta cần nhiều hơn một thư mục bị bỏ qua

  • Trong một thư mục tôi có hai thư mục cần được đặt là svn:ignore
  • Nếu chúng ta đặt một, cái khác sẽ bị xóa.
  • Sau đó, chúng tôi tự hỏi chúng tôi cần svn pe

svn pesẽ cần chỉnh sửa tệp văn bản và bạn có thể sử dụng lệnh này nếu được yêu cầu để đặt trình soạn thảo văn bản của mình bằng vi :

export SVN_EDITOR=vi
  1. Với "o", bạn có thể mở một dòng mới
  2. Nhập tất cả các tên thư mục bạn muốn bỏ qua
  3. Nhấn phím 'esc' để thoát khỏi chế độ chỉnh sửa
  4. Nhập ": wq" rồi nhấn Enterđể lưu và thoát

Các tập tin trông giống như thế này:

runtime
cache
attachments
assets

bạn cũng có thể sử dụng svn propset svn:ignore -F .ignorethesefiles ., nó sẽ sử dụng nội dung của tập tin. Tôi thích giữ nó xung quanh để bạn biết những gì bị bỏ qua. Chỉnh sửa yêu cầu đạo cụ theo dõi.
Gerard ONeill 17/03/2015

20

Xóa nó trước ...

Nếu thư mục của bạn foođã được kiểm soát phiên bản, hãy xóa nó trước:

svn rm --keep-local foo

... sau đó bỏ qua:

svn propset svn:ignore foo .

12

... và nếu bạn muốn bỏ qua nhiều thư mục (nói build/ temp/*.tmptệp), bạn có thể thực hiện theo hai bước (bỏ qua thuộc tính đầu tiên và chỉnh sửa bỏ qua (xem các câu trả lời khác tại đây) hoặc người ta có thể viết một cái gì đó như

svn propset svn:ignore "build
temp
*.tmp" .

trên dòng lệnh.


12

Nếu bạn đang sử dụng ứng dụng khách SVN cụ thể là TortoiseSVN , thì trên cam kết, bạn có tùy chọn nhấp chuột phải vào các mục và chọn "Thêm vào danh sách bỏ qua".


9

Lệnh bỏ qua nhiều mục là một chút khó khăn và yêu cầu dấu gạch chéo ngược.

svn propset svn:ignore "cache\
tmp\
null\
and_so_on" .

Lệnh này sẽ bỏ qua bất cứ điều gì tên cache, tmp, null, và and_so_ontrong thư mục hiện hành.


6
Và chỉ cần làm rõ: Dấu gạch chéo ngược ở đây không phải là một tính năng của svn; nó chỉ đơn giản là một cách để nhập một chuỗi nhiều dòng trên vỏ. Bạn cũng có thể sử dụng một trình soạn thảo và chỉ cần viết nhiều dòng.
sleske

Dấu gạch chéo ngược là không cần thiết cho bash. bash đủ thông minh để biết rằng "mở và không xử lý dòng. Tất cả những gì bạn cần làm là nhấn enter sau cache, tmp và null. Bạn sẽ thấy bash thay đổi lời nhắc thành a> để bạn biết bạn Vẫn đang nhập lệnh. Một cách khác là bắt đầu nhập lệnh (svn), sau đó nhấn esc rồi v. Điều đó sẽ cho phép bạn nhập lệnh trong trình chỉnh sửa. Nhấn ZZ khi hoàn tất để thực hiện lệnh. Nếu bạn đổi ý. và không muốn thực thi, sau đó: q!.
Michael Potter

1
svn propset svn:ignore -F .ignorethesefiles .sẽ cho phép bạn sử dụng một tập tin. Và như đã đề cập, bạn luôn có propedit.
Gerard ONeill 17/03/2015

5

Tôi đã có vấn đề nhận được các thư mục lồng nhau bị bỏ qua; thư mục trên cùng tôi muốn bỏ qua sẽ không hiển thị với 'trạng thái svn' nhưng tất cả các thư mục con đã làm. Điều này có thể là hiển nhiên đối với những người khác, nhưng tôi nghĩ tôi sẽ chia sẻ nó:

THÍ DỤ:

/Thân cây

/ thân cây / bộ đệm

/ trunk / cache / subir1

/ trunk / cache / subir2

cd /trunk
svn ps svn:ignore . /cache
cd /trunk/cache
svn ps svn:ignore . *
svn ci

4

"Cảm ơn bạn" svn vì một cách ghê tởm, không có thật và khó bỏ qua các tập tin.

Vì vậy, tôi đã viết một tập lệnh svn-ign-all :

#!/bin/sh

# svn-ignore-all

# usage: 
#   1. run svn status to see what is going on at each step 
#   2. add or commit all files that you DO want to have in svn
#   3. remove any random files that you don't want to svn:ignore
#   4. run this script to svn:ignore everything marked '?' in output of `svn status`

svn status |
grep '^?' |
sed 's/^? *//' |
while read f; do
    d=`dirname "$f"`
    b=`basename "$f"`
    ignore=`svn propget svn:ignore "$d"`
    if [ -n "$ignore" ]; then
        ignore="$ignore
"
    fi
    ignore="$ignore$b"
    svn propset svn:ignore "$ignore" "$d"
done

Ngoài ra, để bỏ qua danh sách cụ thể của các tệp / tên đường dẫn, chúng ta có thể sử dụng biến thể svn-bỏ qua này . Tôi đoán svn-ign-all nên thực sự giống như xargs svn-ign.

#!/bin/sh

# svn-ignore

# usage:
#   svn-ignore file/to/ignore ...

for f; do
    d=`dirname "$f"`
    b=`basename "$f"`
    ignore=`svn propget svn:ignore "$d"`
    if [ -n "$ignore" ]; then
        ignore="$ignore
"
    fi
    ignore="$ignore$b"
    svn propset svn:ignore "$ignore" "$d"
done

Một điều nữa: Tôi có xu hướng làm ô nhiễm thanh toán svn của tôi với nhiều tệp ngẫu nhiên. Khi đến lúc phải cam kết, tôi chuyển các tệp đó vào thư mục con 'cũ' và bảo svn bỏ qua 'cũ'.


Này Sam, đó là một kịch bản hay. Câu hỏi hiện lên trong đầu tôi: có lẽ vấn đề xuất phát từ việc bỏ qua toàn bộ thư mục là một phần của kho lưu trữ không hoạt động, vì vậy chúng tôi kết thúc với những '?' các tệp về cơ bản là các tệp được sửa đổi trong các thư mục chúng tôi đã thêm vào danh sách bỏ qua? Tôi chỉ tự hỏi liệu có cách nào xung quanh kịch bản của bạn không, vì sẽ rất tẻ nhạt khi chạy nó mọi lúc. Phải không
SquareCat

Không, tôi không thực sự sử dụng nó! chỉ cần cố gắng dọn sạch các tập tin của tôi
Sam Watkins

4

Bash oneliner cho nhiều lần bỏ qua:

svn propset svn:ignore ".project"$'\n'".settings"$'\n'".buildpath" "yourpath"

3

Nếu thư mục dự án của bạn được đặt tên / Project và thư mục bộ đệm của bạn được đặt tên / Project / Cache, thì bạn cần đặt thuộc tính lật đổ trên / Project. Tên thuộc tính phải là "svn: bỏ qua" và giá trị thuộc tính phải là "Cache".

Tham khảo này trang trong cuốn hướng dẫn Subversion để biết thêm về tài sản.


3

Câu trả lời của Jason sẽ làm nên chuyện. Tuy nhiên, thay vì đặt svn: bỏ qua thành "." trên thư mục bộ đệm, bạn có thể muốn bao gồm "bộ đệm" trong thuộc tính svn: bỏ qua thuộc tính của thư mục mẹ , trong trường hợp thư mục bộ đệm không luôn luôn xuất hiện. Tôi làm điều này trên một số thư mục "vứt đi".


3

ĐỂ KIẾM ĐƯỢC GIÁM ĐỐC R SNG SVN S IG IGNORE:

  1. việc này sẽ xóa các tệp khỏi kho lưu trữ, nhưng giữ thư mục dưới sự kiểm soát của SVN:

svn xóa --keep-local path / library_to_keep / *

  1. sau đó đặt bỏ qua thư mục (và tất cả nội dung):

svn propset svn: bỏ qua "*" path / thư mục_to_keep


2

Nếu bạn đang sử dụng một lối vào cho SVN như TortoiseSVN hoặc một loại tích hợp IDE nào đó, thì cũng nên có một tùy chọn bỏ qua trong cùng một menu như thao tác cam kết / thêm.


1

Đặt svn: bỏ qua thuộc tính . Hầu hết các công cụ UI svn có một cách để làm điều này cũng như thảo luận về dòng lệnh trong liên kết.


1

Vì bạn đang sử dụng Phiên bản nên nó thực sự dễ dàng:

  • Duyệt bản sao đã đăng ký của bạn
  • Nhấp vào thư mục để bỏ qua
  • Trong hộp "Bỏ qua bên phải, nhấp vào Chỉnh sửa
  • Nhập *. * Để bỏ qua tất cả các tệp (hoặc * .jpg cho chỉ các tệp jpg, v.v.)

1

Xem dấu gạch chéo của bạn quá. Tôi thấy rằng bao gồm images/*trong tập tin cài đặt bỏ qua của tôi đã không bỏ qua ./images/. Khi tôi chạy svn status -unó vẫn hiển thị ? images. Vì vậy, tôi chỉ thay đổi cài đặt bỏ qua thành chỉ images, không có dấu gạch chéo. Chạy một kiểm tra trạng thái và xóa nó đi.


1

Được giải quyết với Eclipse theo cách tiếp theo:

Trước hết, thực hiện đồng bộ hóa thư mục của bạn với dự án:

nhóm -> đồng bộ hóa

Trong chế độ xem tiếp theo, chế độ xem nhóm, bạn có thể thấy tất cả các tài nguyên mà bạn có thể cam kết với máy chủ SVN.

Vì vậy, chọn thư mục tài nguyên của tài nguyên mà bạn muốn bỏ qua, và sau đó bạn có thể bỏ qua nó bằng cách sử dụng

nhóm -> thêm vào svn:ignore.

Sau đó, trong cửa sổ xác nhận, hãy chọn tùy chọn đầu tiên: "bỏ qua theo tên".

Ví dụ: Nếu tôi muốn bỏ qua thư mục đích và tài nguyên. Class của họ, tôi sẽ đồng bộ hóa và trong chế độ xem đồng bộ hóa, tôi sẽ chọn thư mục đích. Sau đó, tôi sẽ chọn

nhóm-> thêm

đến svn:ignorevà sau đó tôi sẽ xác nhận tùy chọn đầu tiên trong cửa sổ xác nhận.


0

Sau khi mất rất nhiều thời gian để tìm cách thực hiện hoạt động đơn giản này, tôi quyết định đăng nó không khó để tìm một lời giải thích hợp lý.

Đầu tiên hãy để cấu trúc mẫu

$ svn st? dự án / thân cây / mục tiêu? dự án / thân cây / myfile.x

1 - đầu tiên định cấu hình trình chỉnh sửa, trong mycase vim xuất SVN_EDITOR = vim

2 - Quảng cáo svn propedit svn: bỏ qua dự án / trung kế / Trực tiếp sẽ mở một tệp mới và bạn có thể thêm các tệp và thư mục con của mình trong trường hợp loại hình mục tiêu của bạn Lưu và đóng tệp và hoạt động

$ svn st? dự án / thân cây / myfile.x

cảm ơn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.