2016-05-26 2 views
14

На прошлой неделе я создал репозиторий Github и забыл выбрать лицензию на репо. Теперь уже есть 3 больших коммита.Как скопировать фиксацию из одного Git-репо другому?

Я спросил 3 участника, если это нормально, если я удалю репо, а затем создаю его с тем же именем и на этот раз выбирая лицензию при создании репо, и они там, где это хорошо.

Вопрос

Есть ли способ, которым я есть получить фиксаций в новый репозиторий (на этот раз первый совершить это файл лицензии) и по-прежнему держать фиксации метаинформации?

+1

Вы все еще можете добавить лицензию на исходное репо. Подробнее см. Https://help.github.com/articles/open-source-licensing/#how-can-i-go-back-through-my-public-repositories-and-give-them-licenses. – edwinksl

+0

Возможный дубликат [git: Применить изменения, внесенные фиксацией в одном репо на другое репо] (http://stackoverflow.com/questions/3816040/git-apply-changes-introduced-by-commit-in-one-repo- к другому-репо) –

ответ

26

Есть ли способ получить коммиты в новое репо (на этот раз первая фиксация является файлом ЛИЦЕНЗИИ) и по-прежнему сохранять мета-информацию?

Да, добавив удаленный и вишневый сбор, совершает над вашей первой фиксацией.

# 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 

Остальная часть этого ответа, если вы все еще хотите добавить ЛИЦЕНЗИИ к предыдущему репо.

Да. Вы можете поместить свой LICENSE-фиксацию в качестве первого фиксации путем перезагрузки.

Rebasing - это способ переупорядочения заказа, сохраняя при этом все авторы фиксации и даты фиксации неповрежденными.

При работе с общим репо, это обычно обескураживает, если ваша команда не является git-fluent. Для тех, кто этого не делает, они могут просто клонировать новую копию репозитория.

Вот как вы получаете фиксацию LICENSE в качестве первой фиксации.

1. Обновление и перебазироваться ваша локальная копия

Проверьте свой проект и поместите файл ЛИЦЕНЗИИ в фиксации на верхней части вашего тока 3 фиксации стека.

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

Затем сделать интерактивную перебазироваться на мастер-ветви к переставить коммиты.

git rebase -i --root 

Он откроет редактор. Переместите нижнюю строку (фиксация «Первичная фиксация», последняя фиксация) в верхней части файла. Затем сохраните и закройте редактор.

Как только вы выходите из редактора, git записывает коммиты в указанном вами порядке.

Теперь у вас обновлена ​​локальная копия репозитория. do:

git log 

для проверки.

2. Сила толкать ваше новое состояние репо на GitHub

Теперь, когда ваша копия обновляется, вы должны заставить толкать его на GitHub.

git push -f origin master 

Это будет означать, что github переместит главную ветвь в новое место. Вы должны только нажимать в таких случаях, когда все, кто работает с ним, знают о предстоящих изменениях, иначе это путает ваших соавторов.

3. Синхронизировать соавтор GitHub

Наконец, все сотрудники должны синхронизировать этот репозиторий.

Первый они должны иметь чистые хранилища, поскольку следующая команда может быть разрушительной, если есть несохраненные изменения.

# 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 

Всё. Теперь все должны быть синхронизированы.

Смежные вопросы