Làm cách nào để đổi tên tệp bằng svn?


83

Khi tôi cố gắng svn mv old_file_name new_file_name, tôi nhận được

 svn: Path 'new_file_name' is not a directory

Cách chính xác là gì? (xin lỗi, điều này có vẻ quá tầm thường, nhưng tôi bị mắc kẹt).

Tái bút. sử dụng svn phiên bản 1.6.11

CHỈNH SỬA có vẻ như tôi gặp lỗi này chỉ khi new_file_nameđề cập đến tên của tệp hiện đang được kiểm soát phiên bản. Trong trường hợp này, tất nhiên, tôi có thể đơn giản

 mv old_file_name new_file_name
 svn delete old_file_name

Có thể bạn cần đường dẫn đầy đủ của kho lưu trữ file://...hoặc svn://...hoặc http://...tới tệp.
John Alexiou

Câu trả lời:


111

Hành vi khác nhau tùy thuộc vào việc tên tệp đích đã tồn tại hay chưa. Đó thường là một cơ chế an toàn và có ít nhất 3 trường hợp khác nhau:

Tệp đích không tồn tại:

Trong trường hợp này svn mvsẽ hoạt động như sau:

$ svn mv old_file_name new_file_name
A         new_file_name
D         old_file_name
$ svn stat
A  +    new_file_name
        > moved from old_file_name
D       old_file_name
        > moved to new_file_name
$ svn commit
Adding     new_file_name
Deleting   old_file_name
Committing transaction...

Tệp đích đã tồn tại trong kho:

Trong trường hợp này, tệp đích cần được xóa một cách rõ ràng, trước khi có thể đổi tên tệp nguồn. Điều này có thể được thực hiện trong cùng một giao dịch như sau:

$ svn mv old_file_name new_file_name 
svn: E155010: Path 'new_file_name' is not a directory
$ svn rm new_file_name 
D         new_file_name
$ svn mv old_file_name new_file_name 
A         new_file_name
D         old_file_name
$ svn stat
R  +    new_file_name
        > moved from old_file_name
D       old_file_name
        > moved to new_file_name
$ svn commit
Replacing      new_file_name
Deleting       old_file_name
Committing transaction...

Trong đầu ra của svn stat, Rbiểu thị rằng tệp đã được thay thế và tệp có lịch sử.

Tệp đích đã tồn tại cục bộ (chưa được phiên bản):

Trong trường hợp này, nội dung của tệp cục bộ sẽ bị mất. Nếu điều đó ổn, thì tệp có thể được xóa cục bộ trước khi đổi tên tệp hiện có.

$ svn mv old_file_name new_file_name 
svn: E155010: Path 'new_file_name' is not a directory
$ rm new_file_name 
$ svn mv old_file_name new_file_name 
A         new_file_name
D         old_file_name
$ svn stat
A  +    new_file_name
        > moved from old_file_name
D       old_file_name
        > moved to new_file_name
$ svn commit
Adding         new_file_name
Deleting       old_file_name
Committing transaction...

Tôi cần thêm --force vào svn rm new_file_name vì nó phàn nàn rằng new_file không được kiểm soát phiên bản.
Matthew Lock

.. và tôi phải tạo một tệp trống có tên new_file_name.
Matthew Lock vào

4
vào ngày 1.8.3 rm loại bỏ tệp vật lý, chỉ cần chạy "svn mv ..." là đủ, nó thực thi A D.
Sonic Soul

2
Thật buồn cười là SVN đã cũ như thế nào và thật khó xử khi đổi tên một tệp bằng cách sử dụng nó.
Ghasan

1
@Ghasan: Tiêu đề của câu hỏi có thể gây hiểu lầm. Đó là về việc xóa một tệp và đổi tên tệp khác cùng một lúc. Trường hợp sử dụng này không phổ biến và hơi phức tạp với hầu hết các VCS, đặc biệt nếu thông tin sẽ hiển thị trong lịch sử.
nosid,

16

Với tôi, việc sử dụng TortoiseSVN hoạt động dễ dàng trên Windows.

http://tortoisesvn.net/

Nhấp chuột phải vào tệp -> menu TortoiseSVN -> Trình duyệt kho -> nhấp chuột phải vào tệp trong kho -> đổi tên -> nhấn Enter -> nhấp Ok

Sử dụng phiên bản SVN 1.8.8 TortoiseSVN 1.8.5


Không phải OP đang hỏi về Windows, nhưng số phiếu ủng hộ xứng đáng được mở rộng: Tích hợp toàn màn hình có nghĩa là bạn có thể chỉ cần thực hiện việc này trong menu ngữ cảnh từ Explorer.
Barton

Nhưng bây giờ tôi thấy rằng việc đăng câu trả lời của Windows về câu hỏi rõ ràng là gì về Linux đã khiến câu hỏi này bị bỏ phiếu nhiều lần. (nháp, hết thời gian để tôi chỉnh sửa nhận xét ban đầu của mình)
Barton

Tôi đang sử dụng Cygwin trên Windows vào thời điểm đó, vì vậy có một số điểm chéo.
bão_m2138

Tôi không thể làm cho nó hoạt động nếu không sử dụng TortoiseSVN trên Windows. Vì vậy, tôi cảm ơn vì câu trả lời này. Tôi ủng hộ bạn. Việc sử dụng bất kỳ thứ gì khác tiếp tục khiến nó hoàn nguyên bất cứ lúc nào tôi cập nhật. Trong trường hợp của tôi, thay đổi là viết hoa tên tệp. Tôi nghĩ rằng vấn đề trong trường hợp của tôi bắt nguồn từ thực tế là Windows không phân biệt chữ hoa chữ thường.
Jon

1
Điều này đáng lo ngại, nhưng bạn sẽ mất lịch sử của tệp.
FokTheRock

6

Thông báo này sẽ xuất hiện nếu bạn đang sử dụng hệ thống tệp không phân biệt chữ hoa chữ thường (ví dụ: trên máy Mac) và bạn đang cố viết hoa tên (hoặc một sự thay đổi chữ hoa khác). Trong trường hợp đó bạn cần đổi tên thành tên thứ ba, dummy, name:

svn mv file-name file-name_
svn mv file-name_ FILE_Name
svn commit

0

Nó có thể xảy ra nếu bạn tạo thư mục mới trên đĩa TRƯỚC KHI tạo / cam kết nó trong SVN. Tất cả những gì bạn cần chỉ là tạo nó trong SVN và thực hiện sau:

$ svn mv etc/nagios/hosts/us0101/cs/us0101ccs001.cfg etc/nagios/hosts/us0101/ccs/
svn: E155010: Path '/home/dyr/svn/nagioscore/etc/nagios/hosts/us0101/ccs' is not a directory

$ svn status
?       etc/nagios/hosts/us0101/ccs

$ rm -rvf etc/nagios/hosts/us0101/ccs
removed directory 'etc/nagios/hosts/us0101/ccs'

$ svn mkdir etc/nagios/hosts/us0101/ccs
A         etc/nagios/hosts/us0101/ccs

$ svn move etc/nagios/hosts/us0101/cs/us0101ccs001.cfg etc/nagios/hosts/us0101/ccs/us0101accs001.cfg
A         etc/nagios/hosts/us0101/ccs/us0101accs001.cfg
D         etc/nagios/hosts/us0101/cs/us0101ccs001.cfg

$ svn status
A       etc/nagios/hosts/us0101/ccs
A  +    etc/nagios/hosts/us0101/ccs/us0101accs001.cfg
        > moved from etc/nagios/hosts/us0101/cs/us0101ccs001.cfg
D       etc/nagios/hosts/us0101/cs/us0101ccs001.cfg
        > moved to etc/nagios/hosts/us0101/ccs/us0101accs001.cfg

-4

Bạn có thể thực hiện theo 3 bước sau:

 - svn rm old_file_name
 - svn add new_file_name
 - svn commit

4
Cách tiếp cận này là không tốt vì nó mất lịch sử của tập tin
user2913094
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.