Bird
Raised Fist0
Gitdevops~20 mins

Submodules vs subtrees comparison in Git - Practice Questions

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Submodules vs Subtrees Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
🧠 Conceptual
intermediate
2:00remaining
Difference in repository structure between submodules and subtrees
Which statement correctly describes how Git submodules and subtrees manage external repositories within a main project?
ASubmodules keep external repositories as separate folders linked by a commit pointer, while subtrees merge external repositories into the main repository's history.
BSubmodules merge external repositories into the main repository's history, while subtrees keep them as separate folders linked by a commit pointer.
CBoth submodules and subtrees merge external repositories into the main repository's history without keeping separate folders.
DBoth submodules and subtrees keep external repositories as separate folders without merging histories.
Attempts:
2 left
💡 Hint
Think about whether the external code is stored inside the main repo's history or referenced separately.
💻 Command Output
intermediate
2:00remaining
Output of cloning a repository with submodules
What is the output of running the following commands in a fresh directory?
git clone https://example.com/project.git
git submodule update --init --recursive
AClones the main project and submodules but does not initialize them.
BClones only the main project without downloading submodule content.
CClones the main project and initializes all submodules recursively, downloading their content.
DFails with an error because submodules cannot be cloned recursively.
Attempts:
2 left
💡 Hint
Consider what the --init and --recursive flags do for submodules.
🔀 Workflow
advanced
2:00remaining
Updating a subtree to the latest commit from the external repository
Which sequence of commands correctly updates a Git subtree named 'libs/tool' to the latest commit from its remote repository 'https://example.com/tool.git' on branch 'main'?
Agit subtree push --prefix=libs/tool https://example.com/tool.git main
Bgit fetch https://example.com/tool.git && git merge FETCH_HEAD
Cgit submodule update --remote libs/tool
Dgit subtree pull --prefix=libs/tool https://example.com/tool.git main
Attempts:
2 left
💡 Hint
Think about which command pulls and merges changes into the subtree directory.
❓ Troubleshoot
advanced
2:00remaining
Troubleshooting detached HEAD state in submodules
After cloning a repository with submodules and running git submodule update --init, you notice the submodule is in a detached HEAD state. What is the best explanation?
AThe submodule repository is corrupted and cannot checkout branches.
BSubmodules are checked out at a specific commit, not a branch, causing detached HEAD.
CThe main repository forgot to include the submodule's branch information.
DDetached HEAD means the submodule is not initialized properly.
Attempts:
2 left
💡 Hint
Consider how submodules track commits versus branches.
✅ Best Practice
expert
3:00remaining
Choosing between submodules and subtrees for a shared library
You maintain a shared library used by multiple projects. You want to keep the library's history separate, allow independent updates, and avoid complex merge conflicts in the main projects. Which approach is best?
AUse Git submodules to keep the library separate and allow independent updates.
BUse Git subtrees to merge the library history into each project for simpler management.
CCopy the library files manually into each project to avoid Git complexity.
DUse Git subtrees but avoid pushing updates back to the library repository.
Attempts:
2 left
💡 Hint
Think about separation of history and ease of independent updates.

Practice

(1/5)
1. What is the main difference between Git submodules and Git subtrees?
easy
A. Submodules and subtrees are identical in how they manage external repositories.
B. Submodules copy external repositories; subtrees link them separately.
C. Submodules merge external repositories automatically; subtrees require manual merging.
D. Submodules link external repositories separately; subtrees copy them into your project.

Solution

  1. Step 1: Understand submodules behavior

    Submodules keep external repositories linked but separate from the main project folder.
  2. Step 2: Understand subtrees behavior

    Subtrees copy the external repository content directly into your project folder, making it part of your codebase.
  3. Final Answer:

    Submodules link external repositories separately; subtrees copy them into your project. -> Option D
  4. Quick Check:

    Submodules = separate links, Subtrees = copied content [OK]
Hint: Remember: submodules link, subtrees copy [OK]
Common Mistakes:
  • Confusing which method copies code versus links it
  • Thinking submodules merge code automatically
  • Assuming subtrees keep repos separate
2. Which Git command correctly adds a submodule to your repository?
easy
A. git subtree add --prefix=folder_name repo_url branch
B. git submodule add repo_url folder_name
C. git add submodule repo_url folder_name
D. git clone --submodule repo_url folder_name

Solution

  1. Step 1: Identify the correct syntax for adding a submodule

    The correct command is 'git submodule add' followed by the repository URL and the folder name.
  2. Step 2: Verify other options

    git subtree add --prefix=folder_name repo_url branch is for subtrees, not submodules. git add submodule repo_url folder_name and git clone --submodule repo_url folder_name are invalid Git commands for adding submodules.
  3. Final Answer:

    git submodule add repo_url folder_name -> Option B
  4. Quick Check:

    Submodule add uses 'git submodule add' [OK]
Hint: Submodule add always starts with 'git submodule add' [OK]
Common Mistakes:
  • Using 'git subtree add' for submodules
  • Trying to add submodules with 'git add'
  • Confusing clone options with submodule commands
3. Given the commands below, what will be the result after cloning a repository with a submodule?
git clone https://example.com/main-repo.git
cd main-repo
git submodule update --init --recursive
medium
A. Only the main repository is cloned; submodules remain empty folders.
B. The submodules are cloned but not initialized.
C. The main repository and all submodules are cloned and initialized.
D. The clone fails because submodules require separate cloning.

Solution

  1. Step 1: Understand cloning with submodules

    Cloning the main repo alone does not fetch submodule content; submodules are empty initially.
  2. Step 2: Use 'git submodule update --init --recursive'

    This command fetches and initializes all submodules recursively, filling their folders with content.
  3. Final Answer:

    The main repository and all submodules are cloned and initialized. -> Option C
  4. Quick Check:

    Submodule update with init fetches submodules [OK]
Hint: Run 'git submodule update --init --recursive' after clone [OK]
Common Mistakes:
  • Assuming submodules clone automatically with main repo
  • Skipping the submodule update command
  • Confusing initialization with cloning
4. You added a subtree with git subtree add --prefix=lib https://example.com/lib.git main but later changes in the subtree are not reflected in your main repo. What is the likely cause?
medium
A. You forgot to pull subtree updates with git subtree pull.
B. Subtrees automatically sync changes; no action needed.
C. You must use git submodule update to sync subtrees.
D. Subtrees cannot be updated once added.

Solution

  1. Step 1: Understand subtree update process

    Subtrees copy code but do not auto-sync; you must manually pull updates.
  2. Step 2: Identify correct command to update subtree

    The command 'git subtree pull' fetches and merges changes from the external repo into your subtree folder.
  3. Final Answer:

    You forgot to pull subtree updates with git subtree pull. -> Option A
  4. Quick Check:

    Subtrees require manual pull to update [OK]
Hint: Use 'git subtree pull' to update subtree changes [OK]
Common Mistakes:
  • Expecting automatic subtree sync
  • Using submodule commands for subtrees
  • Thinking subtrees are read-only
5. You want to include a third-party library in your project. You want to keep it separate for easy updates but also want your team to clone the project with one command without extra steps. Which approach is best?
hard
A. Use Git subtrees to copy the library into your project for simpler cloning.
B. Use Git submodules and instruct the team to run extra commands after cloning.
C. Manually copy the library files without Git integration.
D. Use Git submodules but disable recursive cloning.

Solution

  1. Step 1: Analyze submodules pros and cons

    Submodules keep code separate but require extra commands after cloning to initialize submodules.
  2. Step 2: Analyze subtrees pros and cons

    Subtrees copy the library into the project, so cloning is simple with one command and no extra steps.
  3. Final Answer:

    Use Git subtrees to copy the library into your project for simpler cloning. -> Option A
  4. Quick Check:

    Subtrees simplify cloning by embedding code [OK]
Hint: Subtrees = easy clone; submodules = extra steps [OK]
Common Mistakes:
  • Choosing submodules despite extra clone steps
  • Ignoring subtree benefits for team convenience
  • Thinking manual copy is better than Git methods
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard