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?
'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. –
Sie können alle vorhandenen Commits in einen Zweig mit 'git rebase -i' zerlegen. –
' 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