Pytanie Jak skopiować zatwierdzenia z jednego repozytorium Git na drugie?


W zeszłym tygodniu stworzyłem repozytorium Github i zapomniałem wybrać licencję na repo. Teraz są już 3 duże zatwierdzenia.

Poprosiłem 3 autorów, jeśli wszystko jest w porządku, jeśli usunę repozytorium, a następnie utworzę je ponownie z tą samą nazwą i tym razem wybierając licencję podczas tworzenia repo, a oni będą w porządku, co to.

Pytanie

Czy istnieje sposób, w jaki dostaję commits do nowego repo (tym razem pierwsze zatwierdzenie jest plikiem LICENCJI) i nadal zachowuję meta informację commit?


22
2018-05-26 22:00


pochodzenie


Nadal możesz dodać licencję do oryginalnego repo. Widzieć help.github.com/articles/open-source-licensing/... dla szczegółów. - edwinksl
Możliwy duplikat git: Zastosuj zmiany wprowadzone przez commit w jednym repo do innego repo - Marc K


Odpowiedzi:


Czy istnieje sposób, w jaki dostaję commits do nowego repo (tym razem pierwsze zatwierdzenie jest plikiem LICENCJI) i nadal zachowuję meta informację commit?

Tak, dodając pilota i czereśnia wybierając zatwierdzenia na górze pierwszego zatwierdzenia.

# 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

# 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

Reszta tej odpowiedzi brzmi: jeśli nadal chcesz dodać LICENCJĘ do poprzedniego repo.

Tak. Możesz dokonać zatwierdzenia LICENCJI jako pierwszego zatwierdzenia przez ponowne przesłanie.

Rebasing to sposób na zmianę kolejności zatwierdzania, przy jednoczesnym zachowaniu wszystkich autorów zatwierdzeń i zatwierdzania dat nienaruszonych.

Pracując nad wspólnym repo, generalnie go zniechęcasz, chyba że cały twój zespół jest grzeczny. Dla tych, którzy nie są, mogą po prostu sklonować nową kopię repozytorium.

Oto jak zrobić zatwierdzenie LICENCJI jako pierwsze zatwierdzenie.

1. Zaktualizuj i odśwież swoją kopię lokalną

Sprawdź swój projekt i umieść plik LICENCJI w zatwierdzeniu NA GÓRZE bieżącego 3 stosu zatwierdzania.

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

Następnie wykonaj interaktywny rebase na gałęzi master do PRZEMIENIAĆ zatwierdzenia.

git rebase -i --root

Otworzy się edytor. Przenieś dolną linię (zatwierdzenie "Zatwierdzenie początkowe", ostatnie zatwierdzenie) na górę pliku. Następnie zapisz i wyjdź z edytora.

Zaraz po wyjściu z edytora, git zapisze zatwierdzenia w podanej kolejności.

Teraz masz zaktualizowaną lokalną kopię repozytorium. zrobić:

git log

do weryfikacji.

2. Wymuś przesunięcie twojego nowego stanu repo do github

Teraz, kiedy twoja kopia jest zaktualizowana, musisz wymusić na niej wciśnięcie github.

git push -f origin master

Dzięki temu github przeniesie gałąź master do nowej lokalizacji. Powinieneś siłą naciskać tylko w takich rzadkich sytuacjach, w których wszyscy pracujący z nim są świadomi nadchodzących zmian, w przeciwnym razie zmyli współpracowników.

3. Zsynchronizuj współpracowników z github

Wreszcie, wszyscy współpracownicy będą musieli zsynchronizować się z tym repozytorium.

Pierwszy muszą mieć czyste repozytoria ponieważ poniższe polecenie może być destrukcyjne, jeśli istnieją niezapisane zmiany.

# 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

to jest to! Wszyscy powinni teraz być zsynchronizowani.


39
2018-05-27 02:51



Świetna odpowiedź! Dzięki! - Kyrol


Miałem podobny problem, w którym zapomniałem dodać repozytorium do mojego githuba i dodałem kilka poprawek, zanim zdałem sobie sprawę z mojego błędu.

Znalazłem całkiem proste rozwiązanie.

Najpierw zdejmij pilota do oryginalnego repo

git remote remove origin

Po drugie dodaj pilota do nowego widelca na moim githubie

git remote add origin <my repo URL>

Potem popchnąłem do mistrza pochodzenia i wszystkie moje pokazy pojawiły się na moim githubie.


0
2017-07-18 21:55