Biểu tượng trạng thái Subversion “~” có nghĩa là gì?


110

Tôi nhận được một biểu tượng dấu ngã khi tôi thực hiện một svn status.

Đây là kết quả đầu ra của dự án sau khi chỉnh sửa nó trong XCode.

svn status
M      build/Currency_Converter.build/Currency_Converter.pbxindex/imports.pbxbtree
M      build/Currency_Converter.build/Currency_Converter.pbxindex/pbxindex.header
M      build/Currency_Converter.build/Currency_Converter.pbxindex/symbols0.pbxsymbols
~      build/Currency_Converter.build/Currency_Converter.pbxindex/strings.pbxstrings
M      main.m
//more changed files

Bất kỳ ý tưởng điều đó có nghĩa là gì? Dường như không thể tìm thấy nó trên google hoặc bất kỳ trang cheat svn nào.

Điều thú vị là tôi chỉ chỉnh sửa main.m, nhưng có rất nhiều tệp đã được sửa đổi. Dunno tại sao lại như vậy. Bất cứ ai có bất kỳ mẹo nào để làm việc với SVN và XCode? Tôi có nên đặt các tệp nguồn của mình dưới quyền kiểm soát phiên bản không?

Chỉnh sửa: - gây ra bởi một tệp đã được kiểm soát phiên bản bị thay thế bởi một tệp thuộc loại khác. Trong trường hợp này, string.pbxstrings từng là một tệp và bây giờ trở thành một thư mục. Đạo đức của câu chuyện là không đặt thư mục xây dựng của bạn vào quyền kiểm soát phiên bản.


Rất tiếc, tôi không chắc liệu có cách "sửa" nó hay không, thay vì chỉ thêm lại. Bạn có thể muốn đăng một câu hỏi khác hỏi liệu có cách nào tốt để giải quyết trạng thái này, bạn sẽ được chú ý nhiều hơn (vì câu hỏi hiện tại đã được trả lời).
Chad Birch

Câu trả lời:


88

Các SVN Sách nói:

Mục được tạo phiên bản dưới dạng một loại đối tượng (tệp, thư mục, liên kết), nhưng đã được thay thế bằng loại đối tượng khác.

Vì vậy, có lẽ ban đầu nó là một tệp duy nhất, nhưng bạn đã thay đổi nó thành một thư mục hoặc một cái gì đó dọc theo những dòng đó?


1
Có vẻ như bạn đã đúng. Bây giờ nó là một thư mục không có tệp .svn. Bất kỳ ý tưởng về cách khắc phục điều đó? Tôi có cần xóa nó khỏi lật đổ và thêm lại nó không?
jergason

bất kỳ cơ hội nào bạn tìm thấy một cách để khắc phục điều này?
Phill Pafford

48
Giải pháp tốt nhất là đổi tên đối tượng mới (trong trường hợp của bạn là thư mục); "svn remove" đối tượng khỏi kho đang gây ra xung đột (có thể là một tệp bạn đã xóa), Cam kết, sau đó đổi tên đối tượng mới trở lại và "svn thêm" nó vào kho. Cam kết một lần nữa. Bạn sẽ có một chuỗi 3 bản sửa đổi trong đó đối tượng cũ tồn tại, đã bị xóa và đối tượng mới được thêm vào tương ứng.
Brian Lacy

8
Trong trường hợp bất kỳ ai đọc chuỗi này đều gặp phải vấn đề tương tự: điều này đã xảy ra với tôi và lý do cho trạng thái '~' là do tôi có một số liên kết tượng trưng trong kho lưu trữ, đã bị ghi đè bởi các tệp tiêu chuẩn bằng thao tác 'sed -i' . Tôi tạo lại các liên kết tượng trưng và dấu '~' biến mất.
jb

5
@JamieBullock Hôm nay điều tương tự cũng xảy ra với tôi vì lý do tương tự. Tôi đã thử lệnh này trước khi biết vấn đề là gì: lệnh svn status | grep ^~ | grep -o [^[:space:]]\*\$ | xargs svn revertnày có thể khôi phục tất cả các liên kết tượng trưng.
Paul

34

Đây là những gì tôi đã làm:

Nếu thư mục đang Kiểm tra

  1. mv Test Test1
  2. svn gỡ bỏ Kiểm tra
  3. mv Test1 Test

5
Điều này có hiệu quả với tôi miễn là tôi cam kết giữa việc xóa và thêm. 1. Kiểm tra mv Test1 2. svn remove thử nghiệm 3. svn commit -m "Test Removed" 4. mv Test1 thử nghiệm 5. SVN thêm thử nghiệm 6. svn commit -m "Thêm Test"
Brandon Brodjeski

1
Câu trả lời của @sancelot tốt hơn nhiều; bạn không cần phải đổi tên nếu sử dụng svn delete --keep-local fileName.
DawnSong

15

Từ

svn help status

Mục có phiên bản '~' bị cản trở bởi một số mục thuộc loại khác

Tôi chỉ thấy điều này khi các quyền đối với tệp đã thay đổi và svn không có quyền truy cập thực thi vào nó, tôi tin tưởng.

Hi vọng điêu nay co ich.


12

Cách dễ nhất để khắc phục điều này là sao lưu, sau đó xóa thư mục hoặc tệp có trạng thái này và sau đó thực hiện "svn up": nó không nhất thiết phải là một thư mục được thay thế bởi một tệp, nó có thể chỉ là thư mục .svn bị thiếu hoặc bị hỏng. .


11
svn delete --keep-local x
svn commit -m "del x"
svn add x
svn commit -m "blah"

Không cần đổi tên. Bạn đã đưa ra câu trả lời tốt nhất.
DawnSong

Câu trả lời tốt nhất! Điều này khắc phục sự cố. Trong trường hợp của tôi, đó là một liên kết mềm được cam kết như một tệp thông thường.

10

Điều này có thể xảy ra khi bạn xóa thư mục .svn trong một thư mục (ví dụ: khi bạn xóa một thư mục và sau đó bạn tạo lại cùng một thư mục) hoặc khi bạn thay thế một thư mục bằng một liên kết tượng trưng hoặc một tệp có cùng tên .

Giả sử đó là một thư mục được gọi là một thư mục, bạn có thể khắc phục điều này bằng cách đưa ra các lệnh sau trong thư mục mẹ:

$ find a-folder -type d -name '.svn' -print0 | xargs -0 rm -Rf
$ svn up --force .
svn: Directory 'logs/.svn' containing working copy admin area is missing
$ svn up --force .
E    a-folder
...
Updated to revision n.

Và sau đó là vấn đề svn thêm / bớt và xác nhận lại các thay đổi


3

Gặp sự cố tương tự, SVN đã phàn nàn về khóa. Đây là những gì chúng tôi đã làm:

  • Đã sao lưu các tệp
  • Đã xóa thư mục được đề cập với rm -r (linux)
  • Ran svn dọn dẹp trên thư mục
  • Ran svn up --force on the directory

3

Tôi chỉ muốn chia sẻ rằng đây là một vấn đề thường xuyên gặp phải khi cài đặt các tiện ích mở rộng trong Joomla. Các phần mở rộng được cài đặt thông qua CMS và thuộc sở hữu của apache mà không cần ghi nhóm. Nói chung, bước tiếp theo là thêm tệp vào SVN nhưng nếu bạn không chỉnh sửa hoặc thay đổi quyền của tệp, thì SVN sẽ thất bại khi không thể ghi thư mục .svn. Đây là giải pháp dễ dàng.

mv foo foo-bak
svn up foo
svn revert foo

# just for good measure. Foo should not show up in the two following commands.
ls | grep foo
svn st | grep foo

mv foo-bak foo
svn add foo

2

Nó cũng có thể là vấn đề của các liên kết tượng trưng trong Windows. Khi bạn cam kết liên kết tượng trưng vào SVN và sau đó kiểm tra nó trong Windows, các liên kết được thay đổi thành tệp thông thường và điều này cũng được báo cáo là ~.


1
Vậy làm thế nào để bạn khắc phục điều này?

2

Tôi thường gặp điều này khi nâng cấp các mô-đun trong (ví dụ.) Joomla !, Wordpress hoặc Drupal. Đôi khi, thư mục .svn bị xóa do quá trình nâng cấp.

# rename updated directory
mv foo foo.new

# restore the old directory
svn up foo

# merge / update the old directory with new items
# notice that the above command will preserve the obsolete files
# so you should do a diff -r in order to remove them
cp -r foo.new/* foo

# Add files commit, etc
svn add foo/*
svn delete foo/xx
svn commit -m "updated module"

0
~ versioned item obstructed by some item of a different kind
    Second column: Modifications of a file's or directory's properties
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.