Wie Sie angefordert
empfehle ich Ihnen nicht den gleichen Repo verwenden kompilierten Code zu speichern.Weil es aus jedem Zustand des Quellcodes erhalten werden kann, und es wird eine unnötige Vervielfältigung von Informationen sein.
Also, in diesem Fall möchten Sie Git als CI-Tool verwenden. Sie sollten ein anderes Repo für die kompilierte Site erstellen und jedes Mal, wenn Sie es benötigen, ein Commit durchführen.
Ich empfehle Ihnen, Zweig für "Produktion" Status des Codes zu wählen. Und wenn Sie sich in diesem Zweig engagieren, sollte der Code neu erstellt werden. Nennen wir es "Produktion".
- Machen Sie separate Git Repo für builded Code.
- Setzen Sie diesen Code zu post-commit Hook in Ihrem SRC Repo. Es verarbeitet alle Commits im Produktionszweig, checkt den Code in ein temporäres Verzeichnis, erstellt Build und schreibt die Änderungen fest.
srcDir='../srcWorkTree'
buildedRepo='../buildedRepo'
if [ `git rev-parse --abbrev-ref HEAD` == "production" ]; then
echo "making builded code commit..."
mkdir -p $srcDir
# http://stackoverflow.com/questions/4479960/git-checkout-to-a-specific-folder
git checkout-index -a -f --prefix=$srcDir/
bundle exec jekyll build --source $srcDir --destination $buildedRepo
cd $buildedRepo
git add -A
commitInfo=$(git log -1 --pretty="%h %B")
git commit -m "autobuild for $commitInfo"
# git push
fi
Eine andere Variante
Wie nehme ich an, haben Sie Zugriff auf Ihre Produktionsserver. Zumindest erwähnen Sie, dass Sie dort git Repo haben. Es wird also sinnvoll sein, einen Post-Receive-Hook zu erstellen, um den Code im Zielverzeichnis zu erstellen. Es wird klarer und einfacher sein als auf der lokalen Maschine, wie ich es beschrieben habe.
Ich nehme an, dass dieser Repo "bare" ist, weil Sie keine Möglichkeit haben sollten, Änderungen auf dem Server vorzunehmen.
Post erhalten Haken:
#!/bin/sh
siteDir='/var/www/site'
tmpSrcDir='/var/www/site'
echo "**** [builder's post-receive hook]"
while read oldrev newrev refname
do
if [ $refname = refs/heads/production ]
then
GIT_WORK_TREE=$tmpSrcDir git checkout --detach $newrev
bundle exec jekyll build --source $tmpSrcDir --destination $siteDir
fi
done
exit 0
Und einige Bemerkungen
Ich sehe, tryed Sie Submodul zu benutzen, um Ihre builded Website zu speichern. Ich empfehle das nicht. Es hat keinen Sinn, denn Ihr Quellcode hängt nicht vom Code ab.
Vielen Dank für Ihre Antwort. Ich befürchte, dass das für die Situation übertrieben sein könnte, und ich hoffe, dass ich einen einfachen Weg finde, es mit Git zu machen, also werde ich die Frage vorerst offen lassen. – Zaz