Wenn Sie zu einem (gemeinsamen) Git-Repository wechseln, werden die Arbeitsdateien dieses Repositorys nicht aktualisiert. Im Grunde, weil die Arbeitsdateien möglicherweise verschmutzt sind, und in diesem Fall müssten Sie zusammenführen --- und dafür müssen Sie vollen Shell-Zugriff haben, was im Allgemeinen nicht der Fall sein kann.
Wenn Sie möchten, dass der neueste "Master" des geteilten Repos irgendwo ausgecheckt wird, können Sie dafür sorgen, dass Sie einen Post-Update-Hook schreiben. Ich gebe ein Beispiel für ein Beispiel, das ich verwende, um das Unterverzeichnis "ui" auszuchecken und Apache zur Verfügung zu stellen.
Allerdings werde ich sagen, dass ich denke, dass Ihr Prozess verbessert werden könnte. Entwickler benötigen im Allgemeinen persönliche Server, auf denen sie testen können, bevor sie zu einem gemeinsamen Punkt drängen: andernfalls ist dieses gemeinsame Repo wahrscheinlich schrecklich unzuverlässig. Bedenke, wenn ich eine Veränderung anwende und es nicht funktioniert, ist das meine Veränderung, die es kaputt gemacht hat oder eine Nebenwirkung von jemand anderem?
OK, ich benutze diese als Post-Update Haken:
#!/bin/sh
# Should be run from a Git repository, with a set of refs to update from on the command line.
# This is the post-update hook convention.
info() {
echo "post-update: [email protected]"
}
die() {
echo "post-update: [email protected]" >&2
exit 1
}
output_dir=..
for refname in "[email protected]"; do
case $refname in
refs/heads/master)
new_tree_id=$(git rev-parse $refname:ui)
new_dir="$output_dir/tree-$new_tree_id"
if [ ! -d "$new_dir" ]; then
info "Checking out UI"
mkdir "$new_dir"
git archive --format=tar $new_tree_id | (cd $new_dir && tar xf -)
fi
prev_link_target=$(readlink $output_dir/current)
if [ -n "$prev_link_target" -a "$prev_link_target" = "tree-$new_tree_id" ]; then
info "UI unchanged"
else
rm -f $output_dir/current
ln -snf "tree-$new_tree_id" "$output_dir/current"
info "UI updated"
title=$(git show --quiet --pretty="format:%s" "$refname" | \
sed -e 's/[^A-Za-z][^A-Za-z]*/_/g')
date=$(git show --quiet --pretty="format:%ci" "$refname" | \
sed -e 's/\([0-9]*\)-\([0-9]*\)-\([0-9]*\) \([0-9]*\):\([0-9]*\):\([0-9]*\) +0000/\1\2\3T\4\5\6Z/')
ln -s "tree-$new_tree_id" "$output_dir/${date}__${title}"
fi
;;
esac
done
Wie bereits erwähnt, diese prüft nur die "ui" Unterverzeichnis aus. Das ist das Bit ": ui", das new_tree_id setzt. Nehmen Sie einfach das ": ui" heraus (oder wechseln Sie zu "^ {tree}"), um alles zu überprüfen.
Checkouts gehen in das Verzeichnis mit dem Git Repo, gesteuert von output_dir. Das Skript erwartet, dass es innerhalb des Git-Repos läuft (was wiederum erwartet wird, dass es leer ist): das ist nicht sehr sauber.
Checkouts werden in "tree-XXXX" -Verzeichnisse gestellt und ein "aktueller" Symlink konnte auf den neuesten verweisen. Das macht den Wechsel von Atom zu Atom, obwohl es wahrscheinlich nicht so lange dauern wird, dass es darauf ankommt.Es bedeutet auch, dass die alten Dateien wieder verwendet werden. Und es bedeutet auch, dass es Festplattenspeicher kaut, während Sie Revisionen vorantreiben ...
+1 Der git-not-update-remote-working-tree ist ein Nebenproblem. Entwickler MÜSSEN einfach ein lokales Arbeitstest-Setup haben (ehrlich gesagt, mit SQLite und dem django dev Server ist es nicht schwer). –
Könnten Sie möglicherweise einen Link zu Ressourcen zum Einrichten des Entwicklungsarbeitsablaufs erstellen, den Sie für Django-Neulinge wie mich empfehlen? –