/ / Come unire un repository git con sottomoduli in un altro con unione sottotree? - git, merge, git-submodules, git-subtree, pretzo

Come unire un repository git con i sottomoduli in un altro con l'unione secondaria? - git, fusione, git-submodules, git-sottotree, pretzò

Ho un repository dotfiles. Voglio unirne un altro con i sottomoduli (prezto), quindi posso comodamente avere tutto in un repository senza l'inconveniente dei sottomoduli.

Come posso sottotree unire prezto nel mio repository dotfile con tutti i suoi sottomoduli?

Posso usare i sottomoduli, posso dividere e unire i sottotitoli nel modo "vecchio stile" o con il nuovo strumento sottotree git.

Non so proprio come fare questo caso specifico.

risposte:

2 per risposta № 1

Alexander Mikhailian ha creato un copione per convertire tutti i sottomoduli in sottotitoli, dovresti essere in grado di adattarlo al tuo caso.

Presentando qui i passaggi:

cat .gitmodules |while read i
do
if [[ $i == [submodule* ]]; then
mpath=$(echo $i | cut -d" -f2)
read i; read i;
murl=$(echo $i|cut -d  -f3)
mcommit=`eval "git submodule status ${mpath} |cut -d  -f2"`
mname=$(basename $mpath)
echo -e "$namet$mpatht$murlt$mcommit"
git submodule deinit $mpath
git rm -r --cached $mpath
rm -rf $mpath
git remote add $mname $murl
git fetch $mname
git branch _$mname $mcommit
git read-tree --prefix=$mpath/ -u _$mname
fi
done
git rm .gitmodules

Penso che il percorso più semplice per te sarebbe quello di applicare lo script sul prezto repo e quindi rendere il repository una sottostruttura in dotfiles repository.

Dopo aver eseguito lo script in prezto repository utilizzerai quanto segue passaggi per creare la sottostruttura:

  1. Aggiungi un nuovo URL remoto che punta a prezto repo nel dotfiles.

    git remote add -f prezto user@example.com:path/prezto.git
    
  2. Unisci il prezto progetto nel locale dotfiles progetto. Questo non cambia nessuno dei tuoi file localmente, ma prepara Git per il passaggio successivo.

    git merge -s ours --no-commit prezto/master
    
  3. Crea una nuova directory chiamata prezto-subdir (o qualunque cosa ti piaccia), e copia la cronologia Git di prezto proiettarci dentro.

    git read-tree --prefix=prezto-subdir/ -u prezto/master
    
  4. Impegnare le modifiche per tenerle al sicuro.

    git commit -m "Subtree merged in prezto"