2016-01-11 7 views
5

A machen alle Klone die Git Repo. Ich möchte wissen, was der Commit-Hash ist, und den Git-Commit-Hash einer Variablen zuweisen, die später in dem MakefileWie kann ich in einem Makefile einen Git-Commit-Hash abrufen und einer Variablen zuweisen?

verwendet werden kann, z.

all: download 
     echo '$(GIT_COMMIT)' 

download: 
     cd buildarea && git clone [email protected]:proj/project.git 
     $(eval GIT_COMMIT = $(shell cd buildarea/project && git log -l --pretty=format:"%H")) 
     echo '$(GIT_COMMIT)' 
+0

1) Wie erhalten Sie den Hash * ohne * Make (d. H. Mit Git direkt), und 2) Sind Sie bereit, den Hash in einer Datei zu speichern? – Beta

+0

1) Ich benutze einen "git log -1 --pretty = format:"% H "2) Ist das wirklich der einzige Weg? – user2569618

+0

Was ist Ihre eigentliche Frage (da das Thema der Frage in der vollständigen Frage selbst beantwortet wird)? ist Ihr Code fehlgeschlagen? Es gibt _multiple_ Möglichkeiten, um den Hash der letzten Commit zu erhalten, und Ihre ist in Ordnung. – Guildencrantz

Antwort

1

Wie wäre es mit Shell-Funktion und 2 Ziele dafür?

all: download getver 

getver: VER=$(shell cd buildarea/project && git log -1 --pretty=format:"%H") 
getver: 
     @echo GIT_COMMIT=$(VER) 

download: 
     mkdir -p buildarea && cd buildarea && [email protected]:proj/project.git 
+0

Der einzige Mod, den ich machen musste, war 'getver: $ (eval GIT_COMMIT = $ (Shell-CD-Buildbereich/Projekt && git log -1 --pretty = Format:"% H ")' – user2569618

0

Ich bin nicht genau sicher, warum, aber es scheint, dass nach den git clone$(shell) zu cd in das Verzeichnis nicht in der Lage ist. Was Sie tun können, ist einfach den ganzen Akt in einem einzigen $(shell) Aufruf durchzuführen.

all: download 
     echo '$(GIT_COMMIT)' 

download: 
     $(eval GIT_COMMIT = $(shell git clone [email protected]:proj/project.git buildarea/project && cd buildarea/project && git rev-parse HEAD)) 
     echo '$(GIT_COMMIT)' 
Verwandte Themen