Frage

Jedes Mal, wenn ich begehen, mache ich mir Sorgen, dass ich eine Abhängigkeit verpasst haben, und ich bin für die einfachste Art und Weise meine git Baum isoliert zu testen, um sicherzustellen, was im git-Index ( „inszenierten“) wird in der Tat der Kompilierung / laufen auf eigene Faust.

existieren Mein Code der Abhängigkeiten im Dateisystem, von wo aus mir dem ‚git add‘ und so einfacher Erstellung und Tests laufen garantiert nicht, dass das, was ich würde / laufen CheckIn kompilieren, wenn der Baum (oder Staging-Bereich) Kasse wurde aus auf ein sauberes Dateisystem.

Ich konnte einen kontinuierlichen Build haben, die nach Vorlage prüfen würde, aber ich lieber keine schlechten Commits in der Geschichte haben, dass ich später Patch haben. Ich möchte daher einen Weg, um eine isolierte Umgebung zu schaffen, die eine Kasse des Baumes sowie den Index / Staging-Bereich umfasst.

Eine Sache, die ich in Betracht gezogen habe, ist mit Git Stash zweimal, das heißt:.

  1. Invoke 'git stash', um die Dateien im Index speichern
  2. erhalten Irgendwie eine Liste der Dateien nicht verfolgt, ‚git add‘ alle diese Dateien, speichern ein neues Versteck
  3. Löschen Sie alle zuvor untracked Dateien
  4. Wiederherstellen der ursprünglichen Stash
  5. Ich soll jetzt eine saubere Umwelt hat, die nur den Code bereits eingecheckten in und den Code in dem Staging-Bereich hat, die wir kompilieren und zu testen.
  6. Wenn Sie fertig sind, ich das Versteck der untracked Dateien wiederherstellen und dann untrack sie mich in der gleichen Position zu verlassen, dass ich in ursprünglich war.

(Diese untracked Dateien nützlich sein können, aber nicht unbedingt Dinge möchte ich in dem Repository prüfen - zum Beispiel Eclipse-Projekte).

Ich habe das Gefühl, ich bin Overengineering ein einfaches Problem, though.

War es hilfreich?

Lösung

Installieren Sie dieses Skript (oder so ähnlich - meine auch gestohlen wird) als pre-commit Haken. Er kopiert den Index in ein temporären Arbeitsverzeichnis und führt eine dort zu bauen. Es wird Dateien fangen, dass Sie verpasst haben.

Ich weiß, es gibt mindestens ein oder zwei andere SO Fragen, die Adresse genau dieses Problem - Test / Validierung des Index anstelle des Arbeits dir in einem Haken pre-commit - aber ich nicht scheinen, kann sie richtig zu finden jetzt.

(Der Vollständigkeit halber habe ich dieses Skript in meinem Repo bekam als .git-Haken / pre-commit / Test-the-Index, gibt es ein paar andere Skripte gibt es Siehe unten für das, was ich verwende, wie. .git / hooks / pre-commit).

#!/bin/sh
#
# Via: http://github.com/jwiegley/git-scripts/blob/master/pre-commit.sh
#

if [ ! $(git rev-parse --symbolic-full-name HEAD) = refs/heads/master ]; then
    exit 0
fi

# These are the locations I keep my temporary source and build trees in
TMPDIR=$HOME/code/myproject-pre-commit
MIRROR=$HOME/code/myproject-pre-commit-mirror

# Exit with status 1 if any command below fails
set -e

# Checkout a copy of the current index into MIRROR
git checkout-index --prefix=$MIRROR/ -af

# Remove files from MIRROR which are no longer present in the index
git diff-index --cached --name-only --diff-filter=D -z HEAD | \
    (cd $MIRROR && xargs -0 rm -f --)

# Copy only _changed files_ from MIRROR to TMPDIR, without copying timestamps.
# This includes copying over new files, and deleting removed ones.  This way,
# "make check" will only rebuild what is necessary to validate the commit.
rsync -rlpgoDOc --delete --exclude-from=.git-hooks/excludes $MIRROR/ $TMPDIR/

# Everything else happens in the temporary build tree
cd $TMPDIR

nosetests

exit 0

Das ist meine eigentliche .git / hooks / pre-commit:

#!/bin/bash

set -e
for hook in $(find .git-hooks/pre-commit -perm /u+x,g+x,o+x -type f -not -name '*~' 2>/dev/null)
do
  echo "@@ Running hook: $(basename $hook)"
  $hook "$@"
done

Andere Tipps

git stash -u --keep-index vor dem Test, gefolgt von git stash pop nach dem Test.

Setup für die wichtigen Dateien ignorieren und einfach diejenigen löschen, die nicht wichtig sind git clean -df

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top