it-swarm.com.de

Zwingt Git-Submodule dazu, immer auf dem neuesten Stand zu bleiben

Ich liebe Git Submodule. Ich hasse auch Git-Submodule. Was ich an ihnen liebe, ist, wie es Ihnen ermöglicht, Abhängigkeiten sauber zu unterteilen usw. Ich verstehe, dass sie auf ein bestimmtes Repo hinweisen, das tue ich. In meinem Fall baue ich jedoch eine Bibliothek, die in einem anderen Projekt verwendet werden soll, und möchte sie in diesem separaten Repo behalten.

Ärgerlich ist es jedoch, wenn ich täglich an dieser Bibliothek arbeite und ständig mit meiner Bibliothek zur App wechseln muss, um die Aktualisierung des Zeigers zu bestätigen.

Ist es also möglich, ein Git-Submodul nur auf dem Kopf des Repos zu haben, auf das es zeigt, während ich ständig diese Bibliothek aktualisiere und hinzufüge?

43
Ben

Nein, und das ist beabsichtigt. Wenn es eine Möglichkeit gäbe, ein Submodul auf den "aktuellen Kopf" eines anderen Repositorys zu verweisen, wäre es unmöglich, eine historische Version (z. B. eine mit Tags versehene Version) vom Haupt-Repository abzurufen. Es würde nicht wissen, welche Version des Submoduls Sie auschecken sollten.

Dennoch können Sie sich für das git-Teilbaum Skript interessieren. Auf diese Weise können Sie mit Submodulen arbeiten, die möglicherweise besser mit Ihrem Workflow kompatibel sind. Ich wurde gerade durch den letzten Beitrag auf HN daran erinnert.

27
Greg Hewgill

Wie ich in " git Submodule tracking latest " erwähne, können Sie seit git 1.8.2 (März 2013) ein Submodul zum HEAD von branch machen:

git submodule add -b <branch> <repository> [<path>]

Ein Submodul SHA1 wird im übergeordneten Repo noch als gitlink ( spezieller Eintrag im Index ) aufgezeichnet.

Ein git submodule update --remote aktualisiert diesen Eintrag in der SHA1 entsprechend dem HEAD eines Zweigs des Submodule-Remote-Repos.

Wenn Sie ein vorhandenes Submodul haben, können Sie Sie können es einem Zweig folgen mit:

cd /path/to/your/parent/repo
git config -f .gitmodules submodule.<path>.branch <branch>

cd path/to/your/submodule
git checkout -b branch --track Origin/branch
  # if the master branch already exist:
  git branch -u Origin/master master

cd /path/to/your/parent/repo
git add path/to/your/submodule
git commit -m "Make submodule tracking a branch"
35
VonC

Warum nehmen Sie keine Änderungen im Submodule-Verzeichnis vor, das selbst ein Git-Repo ist? Auf diese Weise hat Ihre App immer eine aktualisierte Bibliothek.

Vorsichtsmaßnahmen:

  1. Sie müssen die Änderung des Moduls noch in Ihrem App-Repo durchführen, um die Versionskontrolle (für die App) zu übernehmen.

  2. Wenn mehr als eine dieser Apps diese Bibliothek verwendet, funktioniert dies nicht, da nur eine App zu einem bestimmten Zeitpunkt auf dem neuesten Stand ist.

0
Sailesh