2011-07-28 29 views
20

Tôi có một sốcopy/mv directory vào một thư mục khác trong git

dir1/chứa nhiều tệp và subdirecties, tôi muốn đổi tên thư mục thành dir2 /. Tôi cố gắng

git mv dir1/dir2/

tôi nhận được tin nhắn này:

fatal: renaming 'dir1' failed: Permission denied 

update:

Tôi chạy từ git cho cửa sổ dòng lệnh http://code.google.com/p/msysgit/
gì lệnh chính xác là gì?

+0

Bạn đang sử dụng hệ điều hành nào để thực thi các lệnh này? – dwmcc

+0

Tôi chạy từ git cho cửa sổ dòng lệnh http://code.google.com/p/msysgit/ – icn

Trả lời

9

Bạn chỉ có thể sử dụng các công cụ Unix chuẩn hoặc bất kỳ hệ điều hành nào của bạn. Vì vậy:

mv dir1 dir2 

sẽ hoạt động. Chỉ cần chắc chắn rằng bạn thêm cả hai dir1 và dir2 vào khu vực dàn dựng sau khi bạn đã làm điều đó, để bạn cam kết những thay đổi.

Một ví dụ về làm thế nào để cam kết thay đổi (một lần thực hiện) có thể là:

git add dir1 dir2 && git commit dir1 dir2 

Có lẽ những cách khác để làm điều đó quá.

+4

Tôi chắc chắn bạn sẽ mất lịch sử sửa đổi của các tệp bạn di chuyển độc lập với Git. – Vince

+3

@Ghodmode: không, git là nội dung dựa trên và không đổi tên phát hiện dựa trên nội dung tập tin. – user518450

0

Tôi đang chạy git bằng Cygwin. Tôi đã có cùng một vấn đề cho đến khi tôi gỡ bỏ các tập tin untracked từ thư mục được đổi tên. Điều đó cho phép git mv hoàn thành đúng cách.

Nếu bạn thấy các tệp không được theo dõi trong thư mục được đổi tên khi bạn chạy git status thì bạn sẽ phải tạm thời chuyển các tệp đó ở nơi khác và đưa chúng trở lại sau git mv.

20

Nó cũng có thể là thư mục (hoặc tệp bên trong) đang được chương trình khác sử dụng, điều này ngăn bạn làm bất cứ điều gì với thư mục đó. Chỉ trên Windows, rõ ràng.

Sử dụng Process Explorer nếu bạn không chắc chắn chương trình nào đã chụp thư mục/tệp đó.

+0

Đây chính xác là nguyên nhân của vấn đề đối với tôi. Tôi nghĩ rằng đây là câu trả lời tốt hơn câu trả lời được chấp nhận vì việc di chuyển thư mục độc lập với Git sẽ khiến bạn mất lịch sử sửa đổi của bất kỳ tệp nào trong thư mục bạn đang di chuyển. Bên cạnh đó, nó sẽ không thất bại anyway nếu hệ điều hành có các tập tin trong thư mục bị khóa? – Vince

+0

Nó cũng giải quyết được vấn đề của tôi. TGitCache.exe là quá trình giữ thư mục.Tôi nghi ngờ TGitCache sẽ giữ tất cả các thư mục dưới git kiểm soát làm cho lệnh đổi tên không làm việc gần 100% thời gian. –

+0

Điều này đã giải quyết được vấn đề của tôi! BTW, tôi thường sử dụng [unlocker] (http://emptyloop.com/unlocker/) để mở khóa các tập tin bị khóa bởi một quá trình. –

2

Cả thư mục nguồn và đích cần phải được kiểm tra vào kho git. Nếu bạn đang di chuyển dir1 đến dir2 và dir2 chưa được cam kết, bạn sẽ nhận được thông báo lỗi này.

0

Tôi đã gặp vấn đề tương tự. TGitCache.exe là quá trình đang ngăn thư mục được đổi tên. Sử dụng TaksExplorer Tôi đã giết quá trình và chạy lệnh từ dấu nhắc lệnh Git Bash.

Các vấn đề liên quan