2016-05-26 14 views
14

Tuần trước tôi đã tạo một repo Github và quên chọn một giấy phép cho repo. Bây giờ đã có 3 cam kết lớn.Làm thế nào để sao chép các cam kết từ một repo Git khác?

Tôi đã hỏi 3 người đóng góp nếu nó là ok, nếu tôi xóa repo và sau đó tạo lại nó với cùng tên và lần này chọn giấy phép khi tạo repo, và họ ở đâu tốt như thế.

Câu hỏi

Có cách nào tôi có được các cam kết vào repo mới (lần này là người đầu tiên cam kết là file PHÉP) và vẫn giữ cam kết thông tin meta?

+1

Bạn vẫn có thể thêm giấy phép vào repo gốc. Xem https://help.github.com/articles/open-source-licensing/#how-can-i-go-back-through-my-public-repositories-and-give-them-licenses để biết chi tiết. – edwinksl

+0

Bản sao có thể có của [git: Áp dụng các thay đổi được giới thiệu bởi cam kết trong một repo cho một repo khác] (http://stackoverflow.com/questions/3816040/git-apply-changes-introduced-by-commit-in-one-repo- to-another-repo) –

Trả lời

26

Có cách nào tôi có được cam kết vào repo mới (lần này cam kết đầu tiên là tệp LICENSE) và vẫn giữ thông tin meta cam kết không?

Có, bằng cách thêm từ xa và chọn các cam kết ở đầu cam kết đầu tiên của bạn.

# add the old repo as a remote repository 
git remote add oldrepo https://github.com/path/to/oldrepo 

# get the old repo commits 
git remote update 

# examine the whole tree 
git log --all --oneline --graph --decorate --abbrev-commit 

# copy (cherry-pick) the commits from the old repo into your new local one 
git cherry-pick sha-of-commit-one 
git cherry-pick sha-of-commit-two 
git cherry-pick sha-of-commit-three 

# check your local repo is correct 
git log 

# send your new tree (repo state) to github 
git push origin master 

# remove the now-unneeded reference to oldrepo 
git remote remove oldrepo 

Phần còn lại của câu trả lời này là nếu bạn vẫn muốn thêm PHÉP để repo trước đó của bạn.

Có. Bạn có thể đặt LICENSE của bạn cam kết là cam kết đầu tiên bằng cách rebasing.

Việc rebasing là cách sắp xếp lại trật tự cam kết trong khi vẫn giữ nguyên tất cả các tác giả cam kết và cam kết ngày tháng.

Khi làm việc trên một kho lưu trữ được chia sẻ, thường không được khuyến khích trừ khi toàn bộ nhóm của bạn thông thạo. Đối với những người không, họ chỉ có thể sao chép một bản sao mới của kho lưu trữ.

Dưới đây là cách bạn nhận LICENSE của bạn cam kết là cam kết đầu tiên.

1. Cập nhật và rebase bản sao cục bộ của bạn

Kiểm tra dự án của bạn và để các tập tin PHÉP trong một cam kết ON TOP của bạn hiện tại 3 cam kết ngăn xếp.

#create LICENSE file, edit, add content, save 
git add LICENSE 
git commit -m 'Initial commit' 

Sau đó làm một rebase tương tác trên chi nhánh tổng thể để sắp xếp lại các cam kết.

git rebase -i --root 

Nó sẽ mở trình chỉnh sửa. Di chuyển dòng dưới cùng (cam kết "Cam kết ban đầu" của bạn, cam kết mới nhất) lên đầu tệp. Sau đó lưu và thoát khỏi trình chỉnh sửa.

Ngay khi bạn thoát khỏi trình chỉnh sửa, git sẽ ghi các cam kết theo thứ tự bạn vừa chỉ định.

Bạn hiện đã cập nhật bản sao lưu trữ cục bộ của mình. làm:

git log 

để xác minh.

2. Force đẩy nhà nước repo mới của bạn để GitHub

Bây giờ bản sao của bạn được cập nhật, bạn phải buộc đẩy đến github.

git push -f origin master 

Điều này sẽ yêu cầu github di chuyển nhánh chính đến vị trí mới. Bạn chỉ nên ép buộc trong những dịp hiếm hoi như thế này, nơi mọi người làm việc với nó đều biết về sự thay đổi đang chờ xử lý, nếu không nó sẽ gây nhầm lẫn cho cộng tác viên của bạn.

3. Đồng bộ hóa cộng tác viên với github

Cuối cùng, tất cả cộng tác viên sẽ phải đồng bộ hóa với kho lưu trữ này.

Đầu tiên họ phải có kho lưu trữ sạch vì lệnh sau có thể phá hủy nếu có thay đổi chưa được lưu.

# make sure there are no unsaved changes 
git status 

# pull the latest version from github 
git fetch 

# move their master branch pointer to the one you published to github. 
git reset --hard origin/master 

Vậy đó. Mọi người nên đồng bộ hóa ngay bây giờ.

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