2017-07-17 10 views
0

Ich habe den folgenden Code, wo ich Änderungen in meinem Zweig zu Gerrit mit GitpYthon schieben soll.Push Refs/für/Master und Change-ID Problem mit Gitpython

repo_path_new = repo_path+repo_name 
repo_obj = Repo(repo_path_new) 
os.chdir(repo_path_new) 
repo_obj.git.add(A=True) 
if commit_command_line(commit_message, repo_obj, repo_name): 
    repo_obj.git.push("origin", "HEAD:refs/for/master") 

Sie fügt hinzu und schreibt die Datei (en), aber wenn ich zu Refs schieben wollen/für/Master bekomme ich ein Problem aufgetreten:

remote: Processing changes: refs: 1, done 
remote: ERROR: [0f7c907] missing Change-Id in commit message footer 
remote: 
remote: Hint: To automatically insert Change-Id, install the hook: 
remote: gitdir=$(git rev-parse --git-dir); scp -p -P port 
[email protected]:hooks/commit-msg ${gitdir}/hooks/ 
remote: And then amend the commit: 
remote: git commit --amend 
remote: 
To ssh://url:port/repo-name 
! [remote rejected] HEAD -> refs/for/master ([0f7c907] missing Change-Id in commit message footer) 
error: failed to push some refs to 'ssh://url:port/repo-name'' 

Sie beachten Sie, dass ich in der geklonten stehe Repo. Natürlich kann ich die git hook change-id manuell in git bash installieren. Aber da dies automatisch geschehen soll, möchte ich wissen, ob es einen Weg gibt, dies über gitpython zu tun.

Antwort

0

Haben Sie das Repository manuell geklont oder es wurde durch gitpython gemacht? Beachten Sie, dass Sie den commit-msg-Hook nur einmal installieren müssen (beim ersten Klonen des Repositorys), danach haben alle Commits automatisch die Change-Id.

Wenn Sie Zugriff auf Gerrit über SSH laufen:

$ gitdir=$(git rev-parse --git-dir); scp -p -P 29418 GERRIT-SERVER:hooks/commit-msg ${gitdir}/hooks 

Wenn Sie den Zugriff Gerrit Throught HTTPS laufen:

$ gitdir=$(git rev-parse --git-dir); curl --create-dirs -Lo ${gitdir}/hooks/commit-msg https://GERRIT-SERVER/tools/hooks/commit-msg 

Sie können es manuell ausführen, nachdem Sie das Repository klonen oder Sie können diese in den das gitpython.

+0

Ich habe das Repository manuell geklont. Wenn ich die Art installiere, wie Sie sagten, funktioniert es, aber da dieses Skript in der Go-CD (genau wie Jenkins) ausgeführt wird, gibt es keine Möglichkeit zu sagen, dass der commit-msg-Hook existiert. In meinem Code rufe ich dort die erste Option an, die du mir gegeben hast und es scheitert an gitdir (kann es nicht finden). – user535081

+0

Können Sie go-cd so einstellen, dass ein Bash-Skript (mit den Befehlen zum Installieren des Hooks commit-msg) direkt nach dem Klonen des Repository und vor dem Ausführen des gitpython-Skripts ausgeführt wird? –