Bird
Raised Fist0
Gitdevops~20 mins

Adding a submodule in Git - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Submodule Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
💻 Command Output
intermediate
2:00remaining
What is the output of adding a submodule?
You run the command git submodule add https://github.com/example/lib.git libs/lib in your repository. What will be the immediate effect?
AA new folder <code>libs/lib</code> is created with the submodule content, and <code>.gitmodules</code> file is updated.
BThe submodule is cloned but no changes are made to <code>.gitmodules</code>.
CThe command fails because the submodule URL is not valid.
DThe submodule is added but the main repository's <code>HEAD</code> is detached.
Attempts:
2 left
💡 Hint
Think about what files git updates when adding a submodule.
🧠 Conceptual
intermediate
1:30remaining
What does the .gitmodules file contain?
After adding a submodule, what is the purpose of the .gitmodules file in your repository?
AIt stores the URL and path of each submodule to track them in the main repo.
BIt contains the commit hashes of the submodule's latest commits.
CIt lists all branches available in the submodule repository.
DIt stores user credentials for accessing the submodule.
Attempts:
2 left
💡 Hint
Think about what information git needs to find the submodule source.
❓ Troubleshoot
advanced
2:30remaining
Why does 'git submodule update' fail after cloning?
You cloned a repository with submodules but running git submodule update --init gives an error: fatal: no submodule mapping found in .gitmodules for path 'libs/lib'. What is the likely cause?
AYou forgot to run <code>git clone --recursive</code> initially.
BThe submodule URL is unreachable due to network issues.
CThe <code>.gitmodules</code> file is missing or corrupted in the cloned repo.
DThe submodule folder was manually deleted after cloning.
Attempts:
2 left
💡 Hint
The error mentions missing mapping in .gitmodules.
🔀 Workflow
advanced
3:00remaining
Correct sequence to add and commit a submodule
What is the correct order of commands to add a submodule and commit it to your repository?
A2,1,3,4
B1,3,2,4
C1,2,3,4
D3,1,2,4
Attempts:
2 left
💡 Hint
Remember you must add files before committing.
✅ Best Practice
expert
3:00remaining
Best practice for updating submodules in a team
Your team uses git submodules. What is the best practice to ensure everyone has the latest submodule changes after pulling the main repository?
AOnly run <code>git pull</code> since submodules update automatically.
BRun <code>git clone</code> again to get the latest submodules.
CDelete the submodule folder and re-add it with <code>git submodule add</code> after pulling.
DRun <code>git pull</code> then <code>git submodule update --init --recursive</code> to sync submodules.
Attempts:
2 left
💡 Hint
Submodules require explicit update commands after pulling.

Practice

(1/5)
1. What is the main purpose of adding a submodule in a Git project?
easy
A. To merge two Git repositories into one history
B. To create a backup of the current repository
C. To delete a folder from the Git repository
D. To include another Git repository inside your project as a separate component

Solution

  1. Step 1: Understand what a submodule is

    A submodule is a way to include another Git repository inside your own project without merging histories.
  2. Step 2: Identify the purpose of adding a submodule

    It allows managing related projects separately but linked inside your main project.
  3. Final Answer:

    To include another Git repository inside your project as a separate component -> Option D
  4. Quick Check:

    Submodule = separate included repo [OK]
Hint: Submodule means adding a separate repo inside yours [OK]
Common Mistakes:
  • Thinking submodule merges histories
  • Confusing submodule with backup
  • Assuming submodule deletes files
2. Which of the following is the correct command to add a submodule from URL https://github.com/example/lib.git into folder lib?
easy
A. git clone submodule https://github.com/example/lib.git lib
B. git submodule add https://github.com/example/lib.git lib
C. git submodule init https://github.com/example/lib.git lib
D. git add submodule https://github.com/example/lib.git lib

Solution

  1. Step 1: Recall the syntax for adding a submodule

    The correct syntax is git submodule add <url> [path].
  2. Step 2: Match the command with the syntax

    git submodule add https://github.com/example/lib.git lib matches the syntax exactly with the URL and folder path.
  3. Final Answer:

    git submodule add https://github.com/example/lib.git lib -> Option B
  4. Quick Check:

    Use 'git submodule add URL path' [OK]
Hint: Use 'git submodule add URL path' to add submodules [OK]
Common Mistakes:
  • Using 'git add submodule' instead of 'git submodule add'
  • Confusing 'init' with 'add'
  • Trying to clone submodule like a normal repo
3. After running git submodule add https://github.com/example/tool.git tools, what will be the output of git status?
medium
A. Shows new submodule 'tools' added and staged for commit
B. Shows new file 'tools' as untracked
C. Shows no changes
D. Shows error: submodule path 'tools' already exists

Solution

  1. Step 1: Understand what happens after adding a submodule

    Adding a submodule creates a new entry in the .gitmodules file and stages the submodule folder.
  2. Step 2: Check git status behavior

    Git status will show the new submodule as added and staged for commit, not untracked or error.
  3. Final Answer:

    Shows new submodule 'tools' added and staged for commit -> Option A
  4. Quick Check:

    Submodule add = staged submodule [OK]
Hint: After adding, submodule shows staged in git status [OK]
Common Mistakes:
  • Expecting submodule folder as untracked
  • Thinking no changes appear after add
  • Assuming error if folder exists without checking
4. You ran git submodule add https://github.com/example/lib.git lib but got the error: fatal: destination path 'lib' already exists and is not an empty directory. What should you do to fix this?
medium
A. Use git submodule add --force to overwrite
B. Run git submodule update --init instead
C. Delete or move the existing 'lib' folder before adding the submodule
D. Rename the submodule URL to a different repository

Solution

  1. Step 1: Understand the error cause

    The error means the target folder 'lib' already exists and is not empty, so Git refuses to add the submodule there.
  2. Step 2: Fix by clearing the folder

    To add the submodule, you must delete or move the existing 'lib' folder so Git can create the submodule folder cleanly.
  3. Final Answer:

    Delete or move the existing 'lib' folder before adding the submodule -> Option C
  4. Quick Check:

    Remove existing folder to add submodule [OK]
Hint: Remove existing folder before adding submodule [OK]
Common Mistakes:
  • Trying to force add without clearing folder
  • Using update/init instead of add
  • Changing URL instead of fixing folder
5. You want to add a submodule but keep it in a different folder name than the repository's default. Which command correctly adds the submodule from https://github.com/example/utils.git into folder tools/utils?
hard
A. git submodule add https://github.com/example/utils.git tools/utils
B. git submodule add tools/utils https://github.com/example/utils.git
C. git submodule init https://github.com/example/utils.git tools/utils
D. git clone https://github.com/example/utils.git tools/utils

Solution

  1. Step 1: Recall submodule add syntax

    The syntax is git submodule add <url> [path], where path is the folder name you want.
  2. Step 2: Apply to given URL and folder

    git submodule add https://github.com/example/utils.git tools/utils correctly uses the URL first, then the custom folder path 'tools/utils'.
  3. Final Answer:

    git submodule add https://github.com/example/utils.git tools/utils -> Option A
  4. Quick Check:

    URL first, then folder path [OK]
Hint: URL first, then custom folder path in submodule add [OK]
Common Mistakes:
  • Swapping URL and folder arguments
  • Using init instead of add
  • Using clone instead of submodule add
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