2016-06-23 10 views
4

Ich möchte klonen ein Bitbucket Repository zu einem anderen Bitbucket Repository. schaffe ich dies mit einem Shell-Skript, das macht folgendes:Wie kann ich Pull-Requests von Git-Spiegel-Klon ausschließen

git clone --mirror <sourceUrl> 
git remote set-url --push origin <targetUrl> 
git push --mirror 

jetzt die folgende Fehlermeldung erhalte ich beim Schieben weil Bitbucket erlaubt keine Pull-Anforderungen zu drücken (die auf der Quelle Bitbucket erstellt werden):

remote: You are attempting to update refs that are reserved for Bitbucket's pull 
remote: request functionality. Bitbucket manages these refs automatically, and they may 
remote: not be updated by users. 
remote: 
remote: Rejected refs: 
remote:   refs/pull-requests/21/from 
remote:   refs/pull-requests/23/from 
remote:   refs/pull-requests/23/merge 
remote:   refs/pull-requests/24/from 
remote:   refs/pull-requests/24/merge 
To ... 
! [remote rejected] refs/pull-requests/21/from -> refs/pull-requests/21/from (pre-receive hook declined) 
! [remote rejected] refs/pull-requests/23/from -> refs/pull-requests/23/from (pre-receive hook declined) 
! [remote rejected] refs/pull-requests/23/merge -> refs/pull-requests/23/merge (pre-receive hook declined) 
! [remote rejected] refs/pull-requests/24/from -> refs/pull-requests/24/from (pre-receive hook declined) 
! [remote rejected] refs/pull-requests/24/merge -> refs/pull-requests/24/merge (pre-receive hook declined) 
error: failed to push some refs to '...' 

ich löste das Problem mit einem Hinweis von http://christoph.ruegg.name/blog/git-howto-mirror-a-github-repository-without-pull-refs.html durch die mit der folgenden Problemumgehung holen refs anzupassen.

habe ich ein neues nacktes Repository und angepasst, damit der Config die folgende Art und Weise:

[core] 
    repositoryformatversion = 0 
    filemode = true 
    bare = true 
[remote "origin"] 
    fetch = +refs/heads/*:refs/heads/* 
    fetch = +refs/tags/*:refs/tags/* 
    url = <sourceUrl> 
    mirror = true 
    pushurl = <targetUrl> 

Dann fahre ich ein Git-Pull-und Git Push-und alles ist in Ordnung.

Nichtsdestotrotz ist der Workaround keine schöne Lösung, da das Erstellen eines leeren, leeren Repositorys und das Überschreiben dann seltsam ist, also möchte ich eine Alternative.

Fragen:

  • ich den Bedarf hinzufügen können Konfiguration mit „git clone --config“ holen (vor git clone führt er anfänglichen ist holen), aber kann ich die ursprüngliche fetch = +refs/*:refs/* Konfiguration auch mit dem entfernen " Git Klon "Befehl? Dies würde das Problem lösen, dass die Pull-Anfragen anfänglich gezogen werden.
  • Ist es möglich, die Pull-Anfragen aus dem blanken Repository nach dem Pull zu entfernen?
  • Ist es möglich, die Pull-Requests vom Push auszuschließen?
+0

ist dies ein lokaler Bitbucket-Server oder bitbucket.org? Ich wusste nicht, dass letzterer Pull-Requests ziehen konnte. Ich kann nicht reproduzieren. – tedder42

+0

Es ist ein lokaler Bitbucket Server. –

+3

'git show-ref | Schnitt -d '' -f2 | grep 'pull-request' | xargs -L1 git update-ref -d' – Ivan

Antwort

5

Dank an Ivan.

Sein Befehl löste mein Problem. Ich musste nur den Parameter "-r" zu xargs hinzufügen, um auf leere Greps zu reagieren:

git show-ref | cut -d' ' -f2 | grep 'pull-request' | xargs -r -L1 git update-ref -d