2012-04-02 30 views
8

Tôi muốn tạo một chi nhánh mới trong kho lưu trữ của mình mà chỉ bao gồm các tệp từ một thư mục cụ thể trong master và lịch sử của nó sau đó đẩy nhánh đó đến một kho lưu trữ mới.Git tạo một chi nhánh mới chỉ với một thư mục được chỉ định và lịch sử của nó sau đó đẩy đến kho lưu trữ mới

... hoặc thứ gì đó tương đương - ví dụ: có thể đẩy thư mục vào kho lưu trữ mới đến một kho lưu trữ mới mà không cần tạo chi nhánh.

Cho đến nay tôi nghĩ rằng những điều sau đây sẽ hiệu quả, nhưng tôi tự hỏi có cách nào hợp lý hơn không.

1 - Tạo một chi nhánh trống:

git symbolic-ref HEAD refs/heads/<new-branch> 
rm .git/index 
git clean -fdx 

2 - Thanh toán một thư mục từ thạc sĩ:

git checkout master <paths> ... 
git add <paths> ... 
git commit 

3 - Đẩy chi nhánh mới từ xa:

git push -u <remote-URL> <new-branch> 

4 - Sau đó, trong repo mới, hợp nhất chi nhánh với chính:

git checkout -t origin/<new-branch> 
git checkout master 
git merge <new-branch> 
git branch -d afterimage 
git branch -d -r afterimage 

Tôi đang cố gắng thực hiện điều gì đó tương đương với Detach subdirectory into separate Git repository, nhưng không có sự cố git filter-branch.

+3

... nhưng bạn thực sự * cần * để sử dụng 'git filter-branch' để trích xuất lịch sử cho thư mục con. Nếu không có điều đó, bạn chỉ nhận được các tập tin. –

+1

Tôi thực sự không thấy sự quan tâm của việc không theo dõi bài đăng bạn liên kết. Làm theo cách bạn đề xuất các công trình, nhưng là sức mạnh vũ phu, và nó sẽ không làm sạch dữ liệu lịch sử hoặc kho lưu trữ của bạn. – CharlesB

Trả lời

13

Tại sao bạn không muốn sử dụng git filter-branch? Nó được xây dựng đặc biệt cho các nhiệm vụ như công việc bạn muốn.

git branch subdir_branch HEAD 
git filter-branch --subdirectory-filter dir/to/filter -- subdir_branch 
git push git://.../new_repo.git subdir_branch:master 

Điều này sẽ chỉ cung cấp nội dung của bạn dir/to/filter trong một kho lưu trữ mới, bao gồm tất cả lịch sử và không có gì khác. Vì bạn sẽ chỉ lọc nhánh mới được tạo ra, phần còn lại của kho lưu trữ của bạn không bị ảnh hưởng. Bạn có thể xóa subdir_branch sau đó.

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