Git confuso quando si unisce un aggiornamento nel mio sottostruttura
-
19-09-2019 - |
Domanda
In precedenza avevamo usato molti sottomoduli nei nostri principali repository, ma per facilitare la manutenzione dei nostri progetti abbiamo iniziato un ramo sperimentale dove li abbiamo sostituiti con tutte le sottostrutture.
Questo ha funzionato bene -. Ma ora quando sto cercando di aggiornare una delle sottostrutture si fonde erroneamente l'aggiornamento in una directory completamente sbagliato che non è nemmeno una sottostruttura
Il repository principale, dove il ramo "sottostruttura" contiene il ramo sperimentale, è: git: //github.com/hugowetterberg/goodold_drupal.git
Il repository di fondere in aggiornamenti da: git: //github.com/voxpelli/drupal-oembed.git
Fusione facendo: git merge -s sottostruttura oEmbed / master
Il percorso gli aggiornamenti dovrebbero essere fusi in: sites / all / modules / oEmbed /
Il percorso si sono fuse in: modules / aggregatore / traduzioni /
Chiunque abbia un'idea di come ottenere gli aggiornamenti nelle sottostrutture o che cosa l'errore può essere?
Soluzione
Purtroppo questo è un bug (o funzionalità mancante) nel codice "git merge -s sottostruttura". In realtà congetture le sottostrutture che si desidera unire. Di solito, questo risulta magicamente fuori per essere corretto, ma se il sotto-albero contiene un sacco di cambiamenti (o era originariamente vuoto, o qualsiasi altra cosa), allora può fallire clamorosamente.
Il modo migliore per aggirare è:
-
unire i file come avete fatto in precedenza.
-
spostare manualmente tutti i file risultanti a dove dovrebbe sono andati.
-
git commit -a --amend
per correggere l'unione commit.
unioni future probabilmente funzionano bene, a meno che questa directory è costantemente in quantità incredibili di flusso.
Il comando sperimentale " git sottostruttura " ha un parametro --prefix
che dovrebbe permettere di ignorare questo, ma purtroppo non funziona al momento (in quanto richiede lavoro intorno "git merge -s sottostruttura" caratteristiche e non c'è stato tempo per farlo).
In ogni caso, questo dovrebbe essere una situazione rara e la soluzione non sarà necessaria anche per le future unioni dello stesso progetto.
Altri suggerimenti
git versione 1.7.9.5
git pull -s subtree <remote name> <remote branch>
(merge è andato nella directory sbagliata)
git reset --hard HEAD^
git pull -s subtree -Xsubtree=correct/directory <remote name> <remote branch>
Si noti che non v'è alcuna barra finale sulla directory
http://git.661346.n2.nabble.com/PATCH-0-8-The-return-of-Xours-Xtheirs-Xsubtree-dir-td4069081.html