Ich habe ein Projekt, das mehr als 3 Jahre Geschichte im SVN-Repository hat. Es wurde auf Git umgestellt, aber der Typ, der das gemacht hat, nimmt einfach die letzte Version und wirft all diese 3 Jahre Geschichte raus.Ändern Sie den Root-Commit-Elternteil, um auf einen anderen Commit zu zeigen (Verbindung zweier unabhängiger Git-Repositories)
Jetzt hat das Projekt die letzten 3-4 Monate der Geschichte in einem Repository, und ich habe die anderen 3 Jahre SVN-Geschichte in ein neues Git-Repository importiert.
Gibt es eine Möglichkeit, den Root-Commit des zweiten Repository mit dem letzten Commit des ersten zu verbinden?
Es ist so etwas wie dieses:
* 2017-04-21 - last commit on master
|
* 2017-03-20 - merge branch Y into master
|\
| * 2017-03-19 - commit on branch Y
| |
* | 2017-03-18 - merge branch X into master
/| * 2017-02-17 - commit on another new branch Y
* |/ 2017-02-16 - commit on branch X
| * 2017-02-15 - commit on master branch
* | 2017-01-14 - commit on new branch X
\|
* 2017-01-13 - first commit on new repository
|
* 2017-01-12 - init new git project with the last version of the code in svn repository
.
.
There is no relationship between the two different repositories yet, this is what I wanna
do. I want to connect the root commit of 2nd repository with the last commit of the first
one.
.
.
* 2017-01-09 - commit
|
* 2017-01-08 - commit
|
* 2017-01-07 - merge
/|
* | 2016-01-06 - 2nd commit the other branch
| * 2016-01-05 - commit on trunk
* | 2016-01-04 - commit on new branch
\|
* 2015-01-03 - first commit
|
* 2015-01-02 - beggining of the project
Update:
Ich lerne gerade, dass ich eine Die Antwort war, git rebase
tun müssen, aber wie? Bitte, lassen Sie uns die Commit-Daten betrachten, wie es die SHA-1-Codes waren ...git filter-branch
mit --parent-filter
Option zu verwenden, kein git rebase
.
Update 2:
ich den Befehl versucht git filter-branch --parent-filter 'test $GIT_COMMIT = 443aec8880e898710796a1c4fb4decea1ca5ff66 && echo "-p 98e2b95e07b84ad1e40c3231e66840ea910e9d66" || cat' HEAD
und es hat nicht funktioniert:
PS D:\git\rebase-test\rep2cc> git filter-branch --parent-filter 'test $GIT_COMMIT = 443aec8880e898710796a1c4fb4decea1ca5ff66 && echo "-p 98e2b95e07b84ad1e40c3231e66840ea910e9d66" || cat' HEAD
fatal: ambiguous argument '98e2b95e07b84ad1e40c3231e66840ea910e9d66 || cat': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
Update 3:
Es hat nicht auf Windows CMD arbeiten oder PowerShell, aber es hat in Git Bash unter Windows funktioniert.
Nun, haben Sie darüber nachgedacht, beide im selben Repository zu holen und dann eine Geschichte auf eine andere zu übertragen?Dies wird natürlich alle Commits der Geschichte umschreiben, die du neu lädst. –
Lasse hat es richtig gemacht. Richte einfach einen neuen Repo mit korrekt geklonten svn ein, füge eine Fernbedienung mit diesem georteten Repo hinzu, hole und pflücke in den korrekt geklonten svn Repo den Verlauf, der nach dem Klonen von svn auf Git ausgeführt wurde. – eftshift0
Ich bin neu auf Git, ich lerne gerade, dass das Zauberwort, das ich suchte, ist "Rebase" – lmcarreiro