2012-04-02 4 views
8

Ich möchte einen neuen Zweig in meinem Repo erstellen, die nur Dateien aus einem bestimmten Verzeichnis in Master und seine Geschichte dann drücken Diese verzweigen zu einem neuen Repository.Git erstellen Sie einen neuen Zweig mit nur einem angegebenen Verzeichnis und seine Geschichte dann Push to neue Repository

... oder etwas Ähnliches - zum Beispiel kann es möglich sein, ein Verzeichnis in ein neues Repository zu einem neuen Repo zu schieben, ohne einen Zweig zu erstellen.

Bis jetzt denke ich, dass das Folgende funktioniert, aber ich frage mich, ob es einen stromlinienförmigen Weg gibt.

1 - Erstellen Ihnen einen leeren Zweig:

git symbolic-ref HEAD refs/heads/<new-branch> 
rm .git/index 
git clean -fdx 

2 - Checkout ein Verzeichnis von Master:

git checkout master <paths> ... 
git add <paths> ... 
git commit 

3 - Push-Zweig auf neue Fern:

git push -u <remote-URL> <new-branch> 

4 - Dann im neuen Repo den Zweig mit dem Master zusammenführen:

git checkout -t origin/<new-branch> 
git checkout master 
git merge <new-branch> 
git branch -d afterimage 
git branch -d -r afterimage 

Ich versuche etwas zu tun, das Detach subdirectory into separate Git repository entspricht, aber ohne die git filter-branch Unordnung.

+3

... aber Sie * müssen * tatsächlich 'git filter-branch' verwenden, um den Verlauf für das Unterverzeichnis zu extrahieren. Ohne dass Sie nur Dateien erhalten. –

+1

Ich sehe wirklich nicht das Interesse daran, dem Post, den Sie verlinken, nicht zu folgen. Es funktioniert so, wie Sie es vorschlagen, aber es ist rohe Gewalt, und es wird nicht Ihre Geschichte oder Repository-Daten bereinigen. – CharlesB

Antwort

13

Warum möchten Sie nicht git filter-branch verwenden? Es wurde speziell für Aufgaben wie die gewünschte erstellt.

git branch subdir_branch HEAD 
git filter-branch --subdirectory-filter dir/to/filter -- subdir_branch 
git push git://.../new_repo.git subdir_branch:master 

Diese Sie geben nur den Inhalt Ihrer dir/to/filter in ein neues Repository, einschließlich aller seiner Geschichte und nichts mehr. Da Sie nur den neu erstellten Zweig filtern, bleibt der Rest Ihres Repositorys unberührt. Sie können danach die subdir_branch löschen.