2015-10-07 15 views

Trả lời

1

Tôi nghĩ rằng, đây là hoạt động không hợp lệ bạn đang làm.

Bạn không thể di chuyển thư mục hiện tại (pwd) . sang thư mục khác nằm trong thư mục hiện tại. Ngay cả mv lệnh sẽ không hoạt động. Khi đầu ra nói

mv: cannot move ‘.’ to ‘someDir/.’: Device or resource busy 

Sử dụng * trong git mv cũng nói

git mv * someDir 
fatal: can not move directory into itself, source=curDir, destination=curDir/someDir 

Đi lên một cấp độ thư mục, và chọn thư mục mà là để được chuyển đến thư mục đích. Trong trường hợp này cũng là bạn không thể tạo thư mục cha để di chuyển bên trong thư mục con. Nội dung thư mục gốc/tệp có thể được thực hiện để di chuyển đến thư mục đích nhưng không phải là thư mục chính.

+0

Xem câu trả lời của tôi về cách d o điều này bằng cách sử dụng mở rộng Globbing mà không có lỗi ngăn chặn. – featherbelly

11

Tôi vừa tình cờ gặp thông báo lỗi này và dường như giải pháp khá đơn giản.

Nhưng trước hết hãy nhớ có mvgit move.
Cách sử dụng di chuyển bash bình thường là: mv * ./subDir sẽ chỉ tạo cảnh báo nhưng vẫn di chuyển tệp của bạn.

Trong khi git mv với việc sử dụng git mv * ./subDir sẽ tạo ra các lỗi nghiêm trọng và hủy bỏ việc di chuyển:
fatal: can not move directory into itself, source=currentDir/subDir, destination=currentDir/subDir/subDir

Các giải pháp để thực hiện công việc git mv rất đơn giản:
git mv -k * ./subDir Các option -k sẽ chỉ đơn giản là bỏ qua tất cả những hành động đó sẽ tạo ra lỗi.

+2

Vì vậy, bạn áp dụng '-k' và bạn bỏ qua việc di chuyển các tệp. Làm thế nào là hữu ích? – LuxDie

+1

Bởi vì lệnh mv luôn thất bại vì nó cố di chuyển thư mục vào chính nó. Bởi vì điều này hoạt động sẽ trở thành một vòng lặp vô tận và do đó nó tạo ra một lỗi và không có gì được di chuyển. Nhưng với tùy chọn -k nó sẽ không thất bại và cũng sẽ không kết thúc trong một vòng lặp vô tận. – Julian

+4

Có, nhưng nó thực sự sẽ không làm gì cả, tôi đã thử nó. – LuxDie

0

Bạn cần bật Extended Globbing để bạn có thể sử dụng cụm từ thông dụng.

Loại lệnh này trước khi thực hiện lệnh tính năng glob:

$ shopt -s extglob 

(bạn cũng có thể thêm video này vào ~/.bash_profile của bạn nếu bạn không muốn gõ này mỗi lần)

Sau đó, bạn có thể sử dụng cú pháp sau:

$ git mv ./!(exclude_me|exclude_me) ./destination_folder 

Ví dụ, nếu đây là cấu trúc thư mục của bạn:

root 
├── aardvark 
├── contrib 
| ├── folder1 
| └── folder2 
├── custom 
| ├── folder1 
| └── folder2 
├── elephant 
├── hippopotamus 
└── zebra 

và bạn chạy sau trong root thư mục:

$ shopt -s extglob 
$ git mv ./!(custom|contrib) ./contrib 

Bạn sẽ kết thúc với điều này:

root 
├── contrib 
| ├── aardvark 
| ├── elephant 
| ├── folder1 
| ├── folder2 
| ├── hippopotamus 
| └── zebra 
└── custom 
    ├── folder1 
    └── folder2 

Thêm -n cờ là bạn muốn làm một chạy thử nghiệm và đảm bảo rằng lệnh sẽ thực thi mà không có lỗi:

$ git mv -n ./!(exclude_me|exclude_me) ./destination_folder 
Các vấn đề liên quan