2013-08-06 13 views
5

Mamy repozytorium git, które zależy od kodu w innych repozytoriach git. Używamy submodułów, tak jak zwykle, aby wyrazić tę relację i upewnić się, że kod pomocniczy znajduje się w standardowej lokalizacji w strukturze katalogów użytkownika. Aktualizacja kodu nośną jest proste wystarczy:Czy można wymusić wymodelowanie podmodułów Gita?

  • wprowadzić zmiany do modułem
  • popełnić to
  • Push to
  • cd do głównego repozytorium
  • zatwierdzenia zmiany do modułem
  • popchnij to

Problem pojawia się po drugiej stronie. Po tego rodzaju zmiany, dla innych deweloperów, aby uzyskać kompletny i spójny zestaw kodu muszą wykonać trzy polecenia:

  • git pull (aktualizacja głównego repozytorium)
  • git submodule init (w razie żadnych nowych submoduły dodano)
  • git aktualizacji submodule (aktualizacja submodules)

To okazało się trudne do pociągu programistom zrobić wszystko to, zwłaszcza, że ​​we wszystkich naszych innych repozytoriów, które nie zawierają submodules, z ciągnięcie jest wystarczające. Rezultatem jest to, że programiści czasami pracują z kodem, który używa przestarzałych wersji submodułów, co skutkuje fałszywymi problemami, które mogą być czasochłonne do wyśledzenia. Jest tam jakikolwiek sposób, poza napisaniem skryptu powłoki, który wykonuje wszystkie trzy polecenia i nalega "Użyj tego!", Aby uczynić to bardziej automatycznym?

Odpowiedz

4

Można spróbować i zapytać kolegów do:

git config --global fetch.recurseSubmodules on-demand 

Od git config man page:

fetch.recurseSubmodules

Opcja ta może być albo ustawiona na wartość logiczną lub on- żądanie.

  • Ustawienie na wartość boolowską zmienia zachowanie pobierania i przeciągania na bezwarunkowe rekurencyjne na submoduły, gdy ustawione są na true lub na nierekurowanie w ogóle, gdy ustawiono na false.
  • Po ustawieniu na żądanie (wartość domyślna), pobieranie i przeciąganie będzie rekurencyjne tylko do wypełnionego submodułu, gdy jego superprojekt pobierze zatwierdzenie, które aktualizuje odniesienie do modułu.

Drugą alternatywą byłoby poprosić ich, aby zrobić jeszcze jedną złożoną komendę:

git pull --recurse-submodules=on-demand 

Ustawienie git config wspomniano powyżej, ma tę zaletę, aby umożliwić programistom zrobić prosty git pull.

+0

Dzięki. To jest doskonałe. –

0

Potrafię wymyślić dwa rozwiązania.

Napisz scenariusz:

#!/bin/sh 

git pull 
git submodule init 
git submodule update 

dodać alias git:

#in ~/.gitconfig 
[alias] update-all = !git pull && git submodule init && git submodule update 
+0

@VonC ma znacznie lepszą odpowiedź. Wyobrażam sobie, że tego właśnie szukasz.^_ ^ –

Powiązane problemy