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ản và TextMate trên OS X và dòng lệnh.
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ản và TextMate trên OS X và dòng lệnh.
Câu trả lời:
Đặt thuộc svn:ignore
tí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 .
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.)
svn propset svn:ignore -F file.txt .
svn:ignore
và không svn::ignore
như 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ê.
Đây là một cấu trúc thư mục ví dụ:
\project
\source
\cache
\other
Khi trong project
bạ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:ignore
là tên của thuộc tính bạn đang cài đặt, cache
là 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 cache
thư 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
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.
Đ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 add
tin 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 .
svn add --force *
KHÔNG LÀM VIỆC . Sử dụng dấu chấm, không phải ngôi sao.
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 delete
chỉnh sửa chúng, sau đó chỉnh sửa thuộc svn:ignore
tính.
Tôi biết điều đó có vẻ hiển nhiên, nhưng họ cứ hiển thị như ?
trong svn status
danh sách của tôi , khi tôi nghĩ rằng nó sẽ bỏ qua chúng tại địa phương.
Để 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.
Đặt thuộc svn:ignore
tí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.
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
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 svn và svn đồ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à:
.svn
thư mục ẩn)Khi chúng ta cần nhiều hơn một thư mục bị bỏ qua
svn:ignore
svn pe
sẽ 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
Các tập tin trông giống như thế này:
runtime
cache
attachments
assets
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.
... và nếu bạn muốn bỏ qua nhiều thư mục (nói build/
temp/
và *.tmp
tệ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.
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".
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_on
trong thư mục hiện hành.
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.
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
"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ũ'.
Bash oneliner cho nhiều lần bỏ qua:
svn propset svn:ignore ".project"$'\n'".settings"$'\n'".buildpath" "yourpath"
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.
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".
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.
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 -u
nó 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.
Đượ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:ignore
và sau đó tôi sẽ xác nhận tùy chọn đầu tiên trong cửa sổ xác nhận.
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.