Comparaison des sous-modules Git contre Git Subtree
For managing external dependencies in Git, use submodules when you need precise version control and independent project tracking, as they reference specific commits and maintain clear separation, ideal for actively maintained dependencies; use subtree when simplicity is key, as it merges external code directly into your repository, reducing setup complexity and making collaboration easier for new contributors.
When working on large software projects, it’s common to include external dependencies or shared components. Git offers two ways to manage such dependencies: submodules and subtree. Both let you embed another Git repository within your project, but they work very differently and come with distinct trade-offs. Here's a practical comparison to help you decide which fits your workflow.

What Are Git Submodules?
A Git submodule is a reference to a specific commit in another repository. When you add a submodule, Git records the commit hash of the external repo and stores it in your main project.
How Submodules Work:
- You run
git submodule add <repo-url> <path>
to include a repo. - Git creates a
.gitmodules
file listing the submodule’s URL and path. - The actual code lives in a separate
.git
folder inside the submodule directory. - Cloning a repo with submodules requires extra steps:
git clone --recurse-submodules <main-repo>
or
git clone <main-repo> git submodule update --init --recursive
Pros of Submodules:
- Keeps dependencies isolated and version-controlled independently.
- You can pin to a specific commit, ensuring stability.
- Changes in the submodule can be tracked and updated explicitly.
- Ideal when the included project is maintained separately.
Cons of Submodules:
- Complexity for contributors: New team members must learn submodule commands.
- Easy to forget to commit submodule updates (e.g., after modifying the submodule).
- Pulling changes requires updating submodules manually.
- CI/CD pipelines need extra configuration to handle submodules.
Submodules are powerful but can feel like "Git within Git" — and that extra layer adds friction.
What Is Git Subtree?
Git subtree merges the history of an external repository into a subdirectory of your main project. Unlike submodules, there’s no external reference — the code is part of your repo.

How Subtree Works:
- You use
git subtree add
to bring in another repo as a subdirectory. - The external repo’s history is grafted into your project’s history.
- You can later pull updates from the original repo and push your changes back (if needed).
Example:
git subtree add --prefix=lib/my-dep <repo-url> main --squash
(Use --squash
to avoid bloating your history with every commit.)
To update:
git subtree pull --prefix=lib/my-dep <repo-url> main --squash
Pros of Subtree:
- Simpler for users: No special commands needed. Cloning, pulling, and pushing work normally.
- Everything is in one repo — no extra setup for CI or new developers.
- Code is self-contained and easier to distribute.
- Good for vendoring dependencies you don’t plan to modify often.
Cons of Subtree:
- Your repo grows in size (especially if you don’t squash).
- Merging upstream changes can be tricky if you’ve made local modifications.
- Losing clear separation between your code and the dependency.
- Harder to track exactly which version of the dependency you’re using (unless you document it).
Subtree trades some control for simplicity — great when you want "just the code" without overhead.
When to Use Which?
Use Case | Recommended Approach |
---|---|
You need to track a dependency that evolves independently and is actively maintained. | ✅ Submodules |
Your team is small or new, and you want to minimize Git complexity. | ✅ Subtree |
You want contributors to clone and start working immediately. | ✅ Subtree |
You frequently contribute back to the included repo. | ✅ Submodules (easier two-way sync) |
You’re embedding a library with occasional updates. | ✅ Subtree |
You’re concerned about repo bloat and want clean history. | ✅ Submodules |
Bottom Line
- Submodules give you precision and separation but add workflow complexity.
- Subtree keeps things simple and self-contained but blurs project boundaries.
If you value clean architecture and don’t mind the learning curve, go with submodules.
If you prefer simplicity and ease of use — especially for smaller teams or internal tools — subtree is often the better choice.
Basically, it comes down to: do you want a reference to another project, or just its code? Pick submodule or subtree accordingly.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Si vous ajoutez à tort des fichiers à la zone de stockage temporaire de GIT, vous pouvez utiliser la commande gitrestore - endettement ou gitreet pour annuler l'opération. 1. Pour annuler le stockage temporaire d'un seul fichier, vous pouvez exécuter le nom de fichier de Gitrestore ou le nom de fichier GiTreseThead; 2. Pour annuler le stockage temporaire de tous les fichiers à la fois, vous pouvez exécuter Gitrestore. ou gitreet; 3. Si vous avez déjà soumis, vous devez utiliser Gitreet-Mixedhead ~ 1 pour annuler la soumission et conserver les modifications; 4. Si vous souhaitez éliminer les modifications du répertoire temporaire de stockage et de travail en même temps, vous pouvez exécuter Gitrestore-Staged-Work

Pour améliorer les compétences GIT, vous devez d'abord comprendre les concepts de base en profondeur et les pratiquer. 1. Master les commandes principales telles que les principes de Gitadd, Commit, Push et Branch Management. 2. Grâce à la pratique réelle du projet, simulez les erreurs et résolvez les conflits pour accumuler l'expérience. 3. Combiner des outils tels que VScode, les outils Diff et le processus d'optimisation du client GUI. 4. Apprenez les ressources d'une manière ciblée et concentrez-vous sur les problèmes pratiques et les nouvelles fonctionnalités. L'application continue et la réflexion font que Git utilise progressivement un instinct.

Comment examiner efficacement les demandes de traction sur github? Tout d'abord, nous devons clarifier l'objectif du PR, vérifier le titre, la description et si la tâche y est liée et nous assurer que nous comprenons l'intention de changement. 1. Vérifiez l'exactitude, la cohérence, les performances et la sécurité lors de l'examen du code et utilisez des commentaires en ligne pour poser des questions ou des suggestions. 2. Testez le code localement si nécessaire, vérifiez la fonction et trouvez des erreurs potentielles. 3. Décidez d'approuver ou de nécessiter des modifications en fonction des résultats d'examen et de test, et de communiquer et de faire des commentaires clairement. Suivre ces étapes améliore la qualité du code et facilite la collaboration.

Switchtomainandlistmergedbranches withgitbranch - adred, thendeletethemexceptmainanddevelopusinggitbranch - a metged | grep-v "main \\ | développe" | xargsgitbranch-d.2.eletestalemotebranchewithgitfetch -

Gitcherry-Pick est utilisé pour appliquer avec précision un seul engagement. Scénarios applicables: fusionnez rapidement la correction de bogue de la branche de fonctionnalité dans le principal, corrigez le mouvement de la mauvaise branche et correction de la transplantation de branche transversale; 2. L'utilisation de base est Gitcherry-Pick, qui copiera les modifications de l'engagement et générera un nouvel engagement de hachage; 3. Vous pouvez prévisualiser les modifications via --No-Commit, Picking Batch avec un ^ .. B, --ff pour éviter les validations répétées et le contenu de pré-vérification GitShow; 4. Faites attention à éviter les abus dans les succursales partagées, à gérer attentivement les conflits et à ne pas choisir et à fusionner par défaut pour éviter la confusion historique. Utiliser correctement peut améliorer l'efficacité et garder l'historique des engagements propres.

TOOPTIMIZELARGEGITREPOSITORIES, STARTBYUSINGSHALLOWCONES ENFORSSPARSECHECKOTSORESDUDEDATALOAD: 1.Usegitclone - Depth1FORIMIMALHISTORYAndGitsPathSe-CheckouttofEtchOnLyneededDirectries.2.enablebuil

Identifiez les conditions de réconfortationgitstatusafterafailedMerge; 2.OpentheConflitFileToseegit’smarkershowing themandCoutingChanges; 3. EDITTheFileTokeep, combine, OrewRiteTheContent, RemovingtheMarkers; 4.StagethereSolvedFileWithGitaddd; 5.comPleTheMers;

Les conflits surviennent dans le travail d'équipe devraient être résolus grâce à une communication efficace, à la compensation des problèmes, à l'établissement d'objectifs communs et à la formulation de règles. Premièrement, nous devons faire face à l'existence de conflits et en discuter activement pour éviter d'enterrer les dangers cachés; Deuxièmement, nous ne devons pas nous précipiter pour juger le droit ou le mal, mais écoutez les positions et les points de départ de toutes les parties, et résoudre des problèmes de faits plutôt que d'émotions; Deuxièmement, établissez des objectifs communs, tels que l'évaluation des plans de conception du point de vue de l'utilisateur et l'introduction d'une perspective tiers pour aider à la prise de décision; Ensuite, formulez des règles claires, telles que la division du travail des rôles de réunion, l'utilisation d'outils collaboratifs et les mécanismes d'examen et d'ajustement réguliers; Enfin, faites attention à la gestion émotionnelle pour éviter d'escalade des conflits en raison des méthodes d'expression et demandez aux tiers de se coordonner si nécessaire. Tant que vous y êtes confronté à temps et adoptez des méthodes raisonnables, les conflits peuvent être transformés en possibilités de promouvoir les progrès de l'équipe.
