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?

È stato utile?

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 è:

  1. unire i file come avete fatto in precedenza.

  2. spostare manualmente tutti i file risultanti a dove dovrebbe sono andati.

  3. 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

apenwarr

http://git.661346.n2.nabble.com/PATCH-0-8-The-return-of-Xours-Xtheirs-Xsubtree-dir-td4069081.html

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top