Trong kho Git, làm thế nào để đổi tên đúng thư mục?


655

Tôi nghĩ rằng nó sẽ làm việc để sao chép các thư mục để được đổi tên vào một thư mục mới với tên bạn muốn, và xóa các thư mục cũ , và git add, git commitpushtất cả mọi thứ. Nhưng đây có phải là cách tốt nhất?



5
Theo như Git, một bản sao và xóa là điều tương tự như một động thái. Git sẽ ghi lại cả (sao chép + xóa) và (di chuyển) theo cùng một cách.
Dietrich Epp

Câu trả lời:


1183

Đổi tên cơ bản (hoặc di chuyển):

git mv <old name> <new name>

Trường hợp nhạy cảm đổi tên, ví dụ. từ casesensitiveđến CaseSensitiveBạn muốn sử dụng hai bước:

git mv casesensitive tmp
git mv tmp CaseSensitive

( Thông tin thêm về sự nhạy cảm trong trường hợp Git ... )

Theo sau là cam kết và đẩy sẽ là cách đơn giản nhất để đổi tên một thư mục trong repo git.


231
Nhưng nếu bạn muốn đổi tên từ casesensitivethành CaseSensitive, bạn có thể thực hiện theo cách này: git mv casesensitive Tempvà sau đó git mv Temp CaseSensitive
ViliusK

3
Liệu nó có lưu tất cả các bản ghi và số liệu thống kê?
orezvani

23
@ViliusK nếu bạn đang xử lý các thư mục phân biệt chữ hoa chữ thường bất kỳ cách dễ dàng nào tôi đã tìm thấy git rm -rf --cached path/to/your/directoriesthì hãy thêm lại và cam kết
dtothefp

1
Nhưng tại sao GIT không có sự hỗ trợ thích hợp để thay đổi tên cho gói / thư mục? Tại sao tôi thậm chí cần phải tạo một thư mục riêng. Khi tôi thay đổi tên của gói không nên lấy nó làm điểm khác biệt và chăm sóc nó tại thời điểm cam kết & đẩy?
Ahmed

1
Cảm ơn rất nhiều vì chuyện này. Đối với tôi, trước tiên tôi phải thực hiện git config core.ignorecase falsevà sau đó chạy các lệnh liên tiếp, nếu không, trong phần thứ hai tôi sẽ gặp source is emptylỗi.
Rika

107

Nếu bạn nhận được lỗi này: fatal: đổi tên 'Foldername' không thành công: Đối số không hợp lệ

Thử cái này:

git mv foldername tempname && git mv tempname folderName


8
Đây chính xác là những gì tôi cần để thực hiện thay đổi trường hợp trong một thư mục.
cjserio

Mã thông báo '&&' không phải là dấu tách câu lệnh hợp lệ trong phiên bản này. phiên bản git 2.11.0.
Tim Hardy

@Tim Hardy nó cũng có thể được chạy dưới dạng hai lệnh riêng biệt git mv foldername tempnamegit mv tempname folderNamesẽ hoạt động trên Windows.
Larkeith

cái này không hiệu quả kết quả cuối cùng sẽ đặt thư mục 'thư mục' mới vào thư mục 'tempname'
đặt cược

61

1. Thay đổi tên thư mục từ oldfolder thành newfolder

git mv oldfolder newfolder

2. Nếu newfolder đã có trong kho lưu trữ của bạn và bạn muốn ghi đè lên nó và sử dụng: - force

git mv -f oldfolder newfolder

Đừng quên thêm các thay đổi vào chỉ mục và cam kết chúng sau khi đổi tên bằng git mv.

3. Đổi tên người dùng thành thư mục Tên trong trường hợp hệ thống tệp không nhạy cảm

Đổi tên đơn giản bằng lệnh mv bình thường (không phải git mv) sẽ không được công nhận là filechange từ git. Nếu bạn thử nó với lệnh 'git mv' như trong dòng sau

git mv foldername folderName

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ụ: bạn đang sử dụng máy Mac và bạn không định cấu hình nó là phân biệt chữ hoa chữ thường, bạn sẽ gặp thông báo lỗi như thế này:

fatal: đổi tên 'Foldername' không thành công: Đối số không hợp lệ

Và đây là những gì bạn có thể làm để làm cho nó hoạt động: -

git mv foldername tempname && git mv tempname folderName

Điều này phân tách quá trình đổi tên bằng cách đổi tên thư mục lúc đầu thành một tên người dùng hoàn toàn khác. Sau khi đổi tên thành tên người dùng khác, thư mục cuối cùng có thể được đổi tên thành thư mục mới. Sau những 'git mv' đó, một lần nữa, đừng quên thêm và cam kết thay đổi. Mặc dù đây có lẽ không phải là một kỹ thuật đẹp, nhưng nó hoạt động hoàn toàn tốt. Hệ thống tập tin vẫn sẽ không nhận ra sự thay đổi của các trường hợp chữ cái, nhưng git không phải do đổi tên nó thành tên người dùng mới và đó là tất cả những gì chúng tôi muốn :)


9

Bạn có thể đổi tên thư mục bằng hệ thống tập tin. Sau đó, bạn có thể làm git rm <old directory>git add <new directory>( Trang trợ giúp ). Sau đó, bạn có thể cam kết và đẩy.

Git sẽ phát hiện ra rằng nội dung giống nhau và đó chỉ là một hoạt động đổi tên và nó sẽ xuất hiện dưới dạng một mục đổi tên trong lịch sử. Bạn có thể kiểm tra xem đây là trường hợp trước khi sử dụng cam kếtgit status


12
này, nhưng theo cách này, tôi sẽ mất toàn bộ lịch sử cam kết.
ViliusK

1
Bạn có thể giữ lại nếu bạn sử dụng cờ -follow.
Oleksi

Hai lệnh thay vì một, và phải thêm một cờ? Điều này có tốt hơn git mv không?
antgel

4
@topper Không, git mv chỉ là bí danh cho rm + add. Sử dụng git mv là một giải pháp tốt hơn.
Oleksi

5
@topper Lưu ý rằng bạn vẫn sẽ phải sử dụng - theo dõi để xem lịch sử bất kể bạn sử dụng phương pháp nào để di chuyển tệp.
Oleksi

3

Từ ứng dụng web tôi nghĩ bạn không thể, nhưng bạn có thể đổi tên tất cả các thư mục trong Git Client, nó sẽ di chuyển các tệp của bạn trong các thư mục được đổi tên mới, thay vì cam kết và đẩy vào kho lưu trữ từ xa.

Tôi gặp một vấn đề rất giống nhau: Tôi phải đổi tên các thư mục khác nhau từ chữ hoa thành chữ thường (như Abc -> abc), tôi đã đổi tên tất cả các thư mục có tên giả (như 'abc___') và sau đó cam kết với kho lưu trữ từ xa rằng tôi đã đổi tên tất cả các thư mục thành tên gốc bằng chữ thường (như abc) và nó đã lấy chúng!


0

Tôi đã giải quyết nó trong hai bước. Để đổi tên thư mục bằng lệnh mv, bạn cần có quyền làm như vậy, nếu bạn không có quyền, bạn có thể làm theo các bước sau. Giả sử bạn muốn đổi tên caseensitive thành Caseensitive.

Bước 1: Đổi tên thư mục (caseensitive) thành thứ khác từ explorer. ví dụ: Đổi tên caseensitive thành thư mục1 cam kết thay đổi này.

Bước 2: Đổi tên thư mục mới được đặt tên này (thư mục1) thành tên nhạy cảm trường hợp dự kiến ​​(Caseensitive), vd. Đổi tên thư mục1 thành Caseensitive. Cam kết thay đổi này.


0

Đối với trường hợp đổi tên nhạy cảm, git mv somefolder someFolderđã làm việc cho tôi trước đây nhưng không phải hôm nay vì một số lý do. Vì vậy, như một cách giải quyết, tôi đã tạo một thư mục mới temp, chuyển tất cả nội dung somefoldervào temp, xóa somefolder, cam kết temp, sau đó tạo someFolder, chuyển tất cả nội dung tempvào someFolder, xóa temp, cam kết và đẩy someFoldervà nó hoạt động! Hiện lên như someFoldertrong git.


-16

Đơn giản chỉ cần đổi tên thư mục. git là một "trình theo dõi nội dung", do đó, băm SHA1 là như nhau và git biết rằng bạn đổi tên nó. Điều duy nhất thay đổi là đối tượng cây.

rm <directory>
git add .
git commit

1
Điều này không hoạt động luôn. Nó chắc chắn không làm việc cho tôi cho sth. như 20% tệp ...
Tomáš Fejfar
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.