2013-04-18 8 views
5

Sto utilizzando lo git superproject pattern in un progetto di grandi dimensioni che viene distribuito da un agente di generazione Teamcity che non ha un account repository, tuttavia il repository è impostato per consentire la clonazione anonima. Per questo motivo ho impostato i sottomoduli con il loro URL http:// anziché con il loro URL git. Il problema con questo è che il repository rifiuta http spinge:diversi URL push/pull per sottomodulo git

Total 0 (delta 0), reused 0 (delta 0) 
error: RPC failed; result=22, HTTP code = 401 
fatal: The remote end hung up unexpectedly 
fatal: The remote end hung up unexpectedly 

Così ogni volta che aggiorno i moduli quando si passa rami, devo fare un git remote add-url --push per aggiungere il git:// url.

C'è un modo per configurare i sottomoduli nel superprogetto in modo tale che utilizzino già l'url http:// per tirare e l'url git:// per spingere?

+0

Forse impostare il 'pushURL' in' .git/sottomoduli//config'. – soulseekah

risposta

5

Il LibreOffice project also uses submodules e comprende:

Per impostazione predefinita si sottomoduli repository è in uno stato chiamato 'testa staccata' che significa che il commettere il check-out - che è quello che il super-progetto (core) need - non è associato a un nome di ramo locale.

Non dimenticare di aggiungere un pushurl corretto per il sottomodulo su cui stai lavorando o non sarai in grado di eseguire il commit.

$ editor .git/modules/submodule/config 

E nella sezione [remote "origin"] aggiungere:

pushurl = ssh://logerrit/submodule 

(simile a soulseekah s' comment) (nel tuo caso, utilizzare un indirizzo git://)

È può anche farlo attraverso (all'interno di un sottomodulo)

git config remote.origin.pushurl git://... 

Se non lo fai, come illulstrated in this project, si otterrebbe un:

fatal: The remote end hung up unexpectedly 
+0

quindi una volta fatto, c'è un modo per spingere quella configurazione al repository in modo che tutti i nuovi cloni lo otterranno? – theheadofabroom

+0

@BiggAl no questa è una * local * config, che non verrebbe inviata. – VonC

+0

come nota a me stesso, la ricerca e la sostituzione di vime può essere eseguita come 'g: url =: s:^\ (. \ + \) Url = http \ (. \ + \)/\ (Qa /. \ + \) $: \ 1url = http \ 2/\ 3 \ r \ 1pushurl = git \ 2 \: \ 3: 'in .submodules o' g: url =: s:^\ (. \ + \) Url = http \ (. \ + \)/\ (qa /. \ + \) $: \ 1url = http \ 2/\ 3 \ r \ 1pushurl = git \ 2 \: \ 3: 'in .git/config – theheadofabroom