2016-05-26 16 views
14

Letzte Woche habe ich ein Github Repo erstellt und vergessen, eine Lizenz für das Repo auszuwählen. Jetzt gibt es bereits 3 große Commits.Wie kopiere ich Commits von einem Git Repo zu einem anderen?

Ich habe die 3 Mitwirkenden gefragt, ob es in Ordnung ist, wenn ich das Repo lösche und es dann wieder mit dem gleichen Namen und diesmal die Lizenz beim Erstellen des Repos auswählend, und sie waren in Ordnung was das.

Frage

Gibt es eine Möglichkeit ich die Commits in neue Repo bekommen haben (dieses Mal die erste die Lizenzdatei begehen ist) und immer noch die Meta-Informationen verpflichten halten?

+1

Sie können dem ursprünglichen Repo noch eine Lizenz hinzufügen. Weitere Informationen finden Sie unter https://help.github.com/articles/open-source-licensing/#how-can-i-go-back-through-my-public-repositories-and-give-them-licenses. – edwinksl

+0

Mögliches Duplikat von [git: Anwenden von Änderungen, die durch Commit in einem Repo auf ein anderes Repo eingeführt wurden] (http://stackoverflow.com/questions/3816040/git-apply-changes-introduced-by-commit-in-one-repo- zu einem anderen-Repo) –

Antwort

26

Gibt es eine Möglichkeit, habe ich die Commits in neue Repo (dieses Mal die erste Festschreibung ist die LICENSE-Datei) und immer noch die Meta-Informationen commit?

Ja, durch Hinzufügen einer Fernbedienung und Cherry-Picking die Commits auf Ihrem ersten Commit.

# 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 

Der Rest dieser Antwort ist, wenn Sie immer noch die Lizenz auf Ihren vorherigen Repo hinzufügen möchten.

Ja. Sie können Ihr LIZENZ-Commit als erstes Commit durch Rebasieren platzieren.

Rebasing ist eine Möglichkeit, die Commit-Reihenfolge neu zu arrangieren, während alle Commit-Autoren und Commit-Daten intakt bleiben.

Wenn Sie an einem freigegebenen Repo arbeiten, wird es im Allgemeinen davon abgeraten, es sei denn, Ihr gesamtes Team ist git-flent. Für diejenigen, die nicht sind, können sie einfach eine neue Kopie des Repositorys klonen.

So erhalten Sie Ihr LICENCE-Commit als erstes Commit.

1. Aktualisieren und rebase Ihre lokale Kopie

Überprüfen Sie Ihr Projekt aus und legen Sie die Lizenzdatei in einem ON TOP Ihrer aktuellen 3-Stack begehen begehen.

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

Dann tun ein interaktives Unterfütterungsmaterial auf dem Master-Zweig zu neu anordnen die Commits.

git rebase -i --root 

Es wird ein Editor geöffnet. Verschieben Sie die untere Zeile (Ihr "Initial Commit" Commit, das letzte Commit) an den Anfang der Datei. Dann speichere und beende den Editor.

Sobald Sie den Editor verlassen, schreibt git die Commits in der von Ihnen angegebenen Reihenfolge.

Sie haben jetzt Ihre lokale Kopie des Repositorys aktualisiert. do:

git log 

zu verifizieren.

2. Kraft schieben Sie Ihren neuen Repo-Zustand

Nun GitHub, dass Ihre Kopie aktualisiert wird, müssen Sie es auf Github zwingen zu drücken.

git push -f origin master 

Dies teilt github mit, den Master-Zweig an seinen neuen Standort zu verschieben. In seltenen Fällen wie diesem sollten Sie nur dann Druck ausüben, wenn jeder, der damit arbeitet, über die bevorstehende Änderung informiert ist, sonst wird es Ihre Mitarbeiter verwirren.

3. Synchronisieren Mitarbeiter

schließlich auf GitHub, alle Mitarbeiter müssen dieses Repository synchronisieren.

Zuerst müssen sie saubere Repositories haben als der folgende Befehl kann destruktiv sein, wenn es ungespeicherte Änderungen gibt.

# 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 

Das ist es. Jeder sollte jetzt synchron sein.

Verwandte Themen