2011-01-21 24 views
5

Tôi đang viết fast-export/fast-import cho Plastic SCM nhưng tôi đang gặp sự cố khi xử lý các thư mục và tệp có chứa dấu cách trong tên của chúng.định dạng và không gian xuất nhanh git

Ví dụ, một git fast-export của một cái gì đó như:

git mv "new directory" "second directory" 

kết thúc lên được xuất khẩu như:

D new directory/hello.c 
M 100644 :1 second directory/hello.c 

Thay vì một "move" (R) hoạt động. Điều tương tự cũng xảy ra với một tệp có dấu cách trong tên.

Có cách nào để xử lý chính xác không?
Điều đó có nghĩa là Git không thể xử lý các đổi tên trên đường dẫn có dấu cách?

chỉnh sửa với một ví dụ thực tế dưới đây:

Tôi đã một cái gì đó như thế này trên một cam kết:

R src/samples/sampledata src/samples/samplebase 
* R src/samples/samplebase/Test.Workflow.xml src/samples/samplebase/new/Test.Workflow.xml 

và nó vẫn thất bại nhập khẩu nói

fatal: Path src/samples/samplebase/Test.Workflow.xml not in branch 

Vì vậy, tôi hiểu nó doesn 't hỗ trợ một di chuyển của một thư mục và sau đó một di chuyển của một tập tin bên trong nó ... Nó là một chút lạ, phải không?

Trả lời

2

git fast-import không đề cập đến trong phần "Handling rename":

Khi nhập một tập tin đổi tên hoặc thư mục, bạn chỉ cần xóa tên cũ (s) và sửa đổi tên mới (s) trong thời gian tương ứng cam kết. Git thực hiện phát hiện đổi tên sau khi thực tế, chứ không phải rõ ràng trong một lần commit.

Vì vậy, ví dụ của bạn dường như tuân theo logic đó.

Đừng quên Git không có thư mục phiên bản, chỉ blob (tức là nội dung tệp có đường dẫn được liên kết).


Để thêm cho câu hỏi đã chỉnh sửa của bạn:

  • một động thái của một thư mục có nghĩa là, nếu nhập khẩu trong Git, rằng nguồn gốc (thư mục) sẽ phải bị xóa sau khi tất cả các tập tin đã được đã xử lý (tức là đã nhập, đổi tên hay không)
  • di chuyển tệp, khi được nhập trong Git, là một cổ điển git mv.

Năm 2011, OP has posted a question on the old gmane list.
Và sự cố là currently (2017) discussed in Git for Windows (git-for-windows/git issue 908).

+0

Điều này gây nhầm lẫn vì thao tác "đổi tên" cũng được hỗ trợ: tên tệp Đổi tên tệp hiện tại hoặc thư mục con thành một vị trí khác trong nhánh. Tệp hoặc thư mục hiện có phải tồn tại. Nếu đích đến tồn tại, nó sẽ được thay thế bằng thư mục nguồn. 'R' SP SP LF – pablo

+0

@pablo: Tôi đã chỉnh sửa câu trả lời của mình để giải quyết tình huống của bạn. Bạn không di chuyển thư mục khi nhập trong Git. Bạn chỉ cần xóa nó sau khi xử lý tất cả các tệp. – VonC

+0

@ vonc: ok, vì vậy, về cơ bản nó có nghĩa là bạn không thể sử dụng "di chuyển" làm một git-nhập khẩu ?? Đó không phải là những gì tài liệu nói, nhưng tôi đang cố gắng ngay bây giờ và nó không làm việc di chuyển, thật không may. Vấn đề là nó có vẻ khá ngẫu nhiên: một thư mục được đổi tên từ chữ hoa thành chữ thường, sau đó 1000 lần commit sau một tệp không thành công, trong khi các thư mục khác đã được sửa đổi và nhập thành công giữa hai lần commit này. Dường như "di chuyển" được hỗ trợ trên git fast-import để các SCM khác xử lý chính xác các thao tác có thể xuất dễ dàng, nhưng (trừ khi tôi có lỗi ở đây), nó không thực sự hoạt động. – pablo

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