2015-09-15 4 views
17

Im Schritt installieren, Travis CI-Klone des Repo, die in etwa so aussieht:Wie kann ich den Schritt "git clone" in Travis CI anpassen/überschreiben?

git clone --depth=50 --branch=master https://github.com/user/repo.git user/repo

Wie kann ich anpassen/diese außer Kraft setzen?


Hintergrund: Ich verwende tagbasierte Bereitstellungen. Wie Travis getaggte Builds auscheckt (--branch=<tagname>), ist das Git-Repository in einem getrennten Zustand ohne Zugriff auf Zweige. Für den Einsatz muss ich jedoch wissen, auf welchem ​​Zweig ich bin. Meine Lösung besteht darin, einen "normalen" Klon zu erstellen und dann zum getaggten Commit zu wechseln.

Antwort

11

Sie können das Repository erneut im Installationsschritt klonen. Auf diese Weise klonen Sie das Repository zweimal, aber es scheint zu funktionieren.

# .travis.yml 
install: 
    - git clone https://github.com/$TRAVIS_REPO_SLUG.git $TRAVIS_REPO_SLUG 
    - cd $TRAVIS_REPO_SLUG 
    - git checkout -qf $TRAVIS_COMMIT 
+1

Verwenden Sie 'git clone [email protected]: $ {TRAVIS_REPO_SLUG} .git', wenn Sie ein privates Repo mit ssh ,. –

0

Sie können den bereits vorhandenen seichten Klon in einen vollständigen Klon konvertieren. Führen Sie dazu während des Installationsschritts git fetch --unserhalb (verfügbar seit Git Version 1.8.3) aus.

# .travis.yml 
install: 
    - git fetch --unshallow --tags 

Die --tags Flagge Kräfte Alle Tags selbst zu holen, wenn sie auf die ausgecheckt Zweig nicht gehören. Dies ist erforderlich, wenn Ihr Build auch von Tags anderer Zweige abhängt.

+4

das funktioniert nicht, weil Travis die Repositories mit '--depth' klont, was" --single-branch "bedeutet. 'git fetch' holt nur den Zweig, der geklont wurde. –

1

Das Problem ist nicht wirklich, dass Sie in einer abgelösten Branche sind. Es ist, dass git nicht erlaubt, die Tags zu holen: git fetch --tags wird nur den Zweig holen, der durch --branch in dem git clone befohlenen Befehl spcified ist, den Sie gaben.

Ich erkläre das in mehr Details this answer.

lösen Sie Ausgabe (Überprüfung eines bestimmten Tag out) Sie ein Skript aufrufen kann, die so aussieht, nachdem die Repo geklont:

# Keep track of where Travis put us. 
    # We are on a detached head, and we need to be able to go back to it. 
    build_head=$(git rev-parse HEAD) 

    # fetch the tags 
    git config --replace-all remote.origin.fetch +refs/heads/*:refs/remotes/origin/* 
    git fetch --tags 

    # checkout the tagged commit 
    git checkout -qf <your tag> 

    # now do your stuff 

    # go back to where we were at the beginning 
    git checkout ${build_head} 
1

Oder Sie könnten nur die Remote-Abfrage. Fügen Sie die folgenden zu .travis.yml:

env: 
    global: 
     # get all the branches referencing this commit 
     - REAL_BRANCH=$(git ls-remote origin | sed -n "\|$TRAVIS_COMMIT\s\+refs/heads/|{s///p}") 

     # or check if we are on a particular branch: 
     - IS_RELEASE=$(git ls-remote origin | grep "$TRAVIS_COMMIT\s\+refs/heads/release$" 

(Ich bin überrascht, dass die git-Gurus nicht mit dieser gekommen war bereits)

+0

Das ist ausgezeichnet, danke! – matthewcummings516

1

Führen dieser während Build Zugang zum Ursprung Tags haben/branches

git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*" 1>/dev/null 
git fetch origin -q 

Danach können Sie diesen Befehl ausführen können Zweige finden Ihre verpflichten enthält

BRANCHES=`git branch -a --contains "$TRAVIS_TAG"` 

Ich habe vor langer Zeit ein Skript erstellt, um den Zweig 'environment' zu holen, in dem das Tag für die kontinuierliche Bereitstellung erstellt wurde.

Es kann Sie begeistern: https://gist.github.com/rolebi/a0eb1f783b7f3a5f21a631c8da1582dc

es wie das Benutzen:

TARGET_ENV="`test $TRAVIS_TAG && bash scripts/get_branch_for_git_reference.sh $TRAVIS_TAG`" 
1

ich gefunden, um den Zugriff auf Ihre gesamten Repo zu erhalten Sie benötigen folgendes:

install: 
    - git config remote.origin.fetch +refs/heads/*:refs/remotes/origin/* 
    - git fetch --unshallow --tags 

Auf diese Weise haben Sie Zugriff auf entfernte Niederlassungen und Tags (z. B. Checkout).

Wenn Sie auf einem Tag sind aber nicht mehr in einem frei stehenden HEAD Zustand sein wollen Sie einen neuen Zweig erstellen können, die mit dem Tag Punkte (nach this discussion):

install: 
    - git config remote.origin.fetch +refs/heads/*:refs/remotes/origin/* 
    - git fetch --unshallow --tags 
    - git symbolic-ref --short HEAD || git checkout -b ${TRAVIS_BRANCH}-test $TRAVIS_BRANCH 

Hinweis: git symbolic-ref --short HEAD werden scheitern, wenn Sie sich in einem getrennten HEAD-Zustand befinden.