2016-07-11 16 views
0

Lassen Sie uns sagen, dass ich die folgenden vier Dateien auf meinem master Zweigverpflichten, bestimmte Dateien auf Niederlassung

$ ls 
README.txt documentation.html main.py docs/main.html 

$ git branch -a 
* master 
    remotes/origin/gh-pages 
    remotes/origin/master 

Q., was der Satz von Befehlen, die ich sollte nur die HTML-Dateien documentation.html und docs/main.html auf ein begehen laufen separaten Zweig gh-pages in einer Weise, dass es den bestehenden Zweig zerstört und erstellt ein einziges Commit mit diesen Dateien? Ich möchte sie auch auf die entfernte Maschine schieben. Ist es möglich, dies zu tun, ohne git checkout gh-pages zu laufen?

Meine aktuelle Lösung dafür ist, die folgenden Befehle verwenden

git branch -D gh-pages || echo "Delete local branch failed. It is possible that local branch exists" 
git checkout --orphan gh-pages 
git rm --cached $(git ls-files) # unstage existing files 

# Currently using python add_files.py to do this instead 
# subprocess.call('git add {}'.format(html_file)') 
find . -name '*.html' | xargs git add 

git commit -m "Commit all html files. This commit message does not matter" 

git reset $(git commit-tree HEAD^{tree} -m "Generate Sphinx Documentation") # Creates a single commit from current branch 
git push --set-upstream origin gh-pages --force 
git clean -fxd # Since I unstaged existing files, they will cause conflicts on running the next command if not removed 
git checkout master 

git pull # Just to make sure master and origin/master are in sync 

Das ist nicht elegant ist meiner Meinung nach, aber es funktioniert. Ich habe mich gefragt, ob es einen besseren Weg dafür gibt? Der Zweck dieses "Skripts" besteht darin, Dokumentation auf einem ContinuousIntegration-Server zu generieren und die Dokumentation an einen Zweig gh-pages im Remote-Repository zu senden, um GitHub-Seiten oder GitLab-Seiten zu nutzen. Ich bin nicht besorgt über die Geschichte der Gh-Seiten Zweig.

Gedanken?

+0

'git push -f ursprungsgh-pages', nachdem Sie den lokalen Zweig erstellt haben. Oder Sie können einfach 'git push ursprung: gh-pages' drücken, um den entfernten Zweig zuerst zu löschen, wenn Sie nicht das Flag' -f' wollen. –

+0

Sie können alle vorhandenen Commits in einen Zweig mit 'git rebase -i' zerlegen. –

+0

' git rebase -i' funktioniert nicht, wenn ich Travis-CI oder Jenkins verwende. Das Äquivalent "git rebase --root" wird nur alle Commits mit Ausnahme des Root-Commits in eins zusammenführen, wobei zwei Commits auf dem Zweig verbleiben. – kdheepak

Antwort

0

Zum Hinzufügen von nur HTML-Dateien können Sie einfach git add *.html ausführen.

in einer Weise, dass es den vorhandenen Zweig zerstört und ein einziges Commit erstellt, das diese Dateien enthält?

Damit denke ich, dass Sie nur mit dem aktuellen Zustand Ihrer Dateien betroffen sind, aber ich werde nicht vorschlagen, dies zu tun. Die Pflege einer Historie ist immer hilfreich. Sie können jedoch immer git push -f origin gh-pages nach der Änderung gh-Seiten Niederlassung lokal tun. Auf diese Weise enthält Ihr Zweig immer einen einzigen Commit mit den letzten Änderungen.

Ist es möglich, dies zu tun, ohne git checkout gh-pages zu laufen?

Nun, Sie tun es gerade, aber es ist ziemlich ausführlich. Gib this answer einen Blick. Obwohl Sie sich in der Zweigstelle auschecken, ersparen Sie Ihnen auch, git reset und git clean zu tun, wie Sie in Ihrem aktuellen Ansatz tun.

+0

Danke für diese Antwort. Es gibt ein Tool, das scheinbar das Gleiche tut - [ghp_import] (https://github.com/davisp/ghp-import/blob/master/ghp_import.py). Es scheint jedoch keine Liste von Dateien als eine Eingabe zu nehmen und scheint stattdessen an einem ganzen Ordner zu arbeiten. – kdheepak

Verwandte Themen