Bird
Raised Fist0
Gitdevops~5 mins

Cloning with submodules in Git - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is a Git submodule?
A Git submodule is a repository embedded inside another Git repository. It allows you to keep a separate project within your main project, tracking its own history.
Click to reveal answer
beginner
How do you clone a Git repository including its submodules in one command?
Use git clone --recurse-submodules <repository-url>. This clones the main repo and initializes and updates all submodules automatically.
Click to reveal answer
intermediate
What commands do you run after cloning a repo without --recurse-submodules to get the submodules?
Run git submodule init to initialize submodules, then git submodule update to fetch and checkout the submodule content.
Click to reveal answer
beginner
Why might you want to use Git submodules?
To include and track external projects or libraries inside your project while keeping their histories separate and manageable.
Click to reveal answer
beginner
What happens if you forget to update submodules after cloning a repo?
The submodule folders will be empty or not contain the expected files because the submodule content was not fetched and checked out.
Click to reveal answer
Which command clones a Git repository and all its submodules in one step?
Agit clone <repository-url> --init-submodules
Bgit clone <repository-url> && git submodule update
Cgit clone <repository-url> --submodules
Dgit clone --recurse-submodules <repository-url>
After cloning a repo without submodules, which command initializes the submodules?
Agit submodule fetch
Bgit submodule clone
Cgit submodule init
Dgit submodule checkout
What does git submodule update do?
ADeletes submodules from the repo
BFetches and checks out the submodule content at the commit specified by the main repo
CUpdates the main repository only
DCreates a new submodule
If you want to add a new submodule to your Git repo, which command do you use?
Agit submodule add <repository-url> <path>
Bgit add submodule <repository-url>
Cgit clone --submodule <repository-url>
Dgit submodule init <repository-url>
What is a common problem if you forget to update submodules after cloning?
ASubmodule folders are empty or missing files
BMain repo files are corrupted
CGit refuses to commit changes
DYou cannot push to remote
Explain the steps to clone a Git repository with submodules and ensure all submodules are properly initialized and updated.
Think about cloning and then preparing submodules separately if not done in one step.
You got /3 concepts.
    Describe what a Git submodule is and why it might be useful in a project.
    Imagine including a small project inside a bigger one but keeping it independent.
    You got /4 concepts.

      Practice

      (1/5)
      1. What does the command git clone --recurse-submodules <repo_url> do?
      easy
      A. Clones the main repository and all its submodules in one step
      B. Clones only the main repository without any submodules
      C. Updates submodules after cloning the main repository
      D. Removes submodules from the cloned repository

      Solution

      1. Step 1: Understand the purpose of --recurse-submodules

        The option tells Git to clone the main repo and all submodules recursively in one command.
      2. Step 2: Compare with cloning without this option

        Without it, only the main repo is cloned; submodules need separate commands to fetch.
      3. Final Answer:

        Clones the main repository and all its submodules in one step -> Option A
      4. Quick Check:

        --recurse-submodules = clone main + submodules [OK]
      Hint: Use --recurse-submodules to clone all at once [OK]
      Common Mistakes:
      • Thinking it clones only the main repo
      • Confusing update with clone
      • Assuming it removes submodules
      2. Which of the following is the correct command to clone a repository along with its submodules?
      easy
      A. git clone --update-submodules https://example.com/repo.git
      B. git clone --init-submodules https://example.com/repo.git
      C. git clone --recurse-submodules https://example.com/repo.git
      D. git clone --submodule-update https://example.com/repo.git

      Solution

      1. Step 1: Identify the correct flag for cloning with submodules

        The correct flag is --recurse-submodules to clone main repo and submodules together.
      2. Step 2: Check other options for validity

        Options --init-submodules, --update-submodules, and --submodule-update are not valid git clone flags.
      3. Final Answer:

        git clone --recurse-submodules https://example.com/repo.git -> Option C
      4. Quick Check:

        --recurse-submodules is the correct clone flag [OK]
      Hint: Remember: clone with --recurse-submodules for submodules [OK]
      Common Mistakes:
      • Using non-existent flags like --init-submodules
      • Mixing update commands with clone
      • Misspelling the flag
      3. After cloning a repository without --recurse-submodules, you run git submodule update --init --recursive. What is the expected result?
      medium
      A. Submodules are initialized and updated to the correct commit
      B. The main repository is recloned
      C. Submodules are deleted from the repository
      D. Nothing happens because submodules are not cloned

      Solution

      1. Step 1: Understand the command purpose

        The command initializes submodules and updates them recursively to the commit recorded in the main repo.
      2. Step 2: Clarify what happens after cloning without submodules

        Submodules are present as empty folders; this command fetches their content properly.
      3. Final Answer:

        Submodules are initialized and updated to the correct commit -> Option A
      4. Quick Check:

        git submodule update --init --recursive = fetch submodules [OK]
      Hint: Use update --init --recursive to fetch missing submodules [OK]
      Common Mistakes:
      • Thinking it reclones the main repo
      • Assuming submodules get deleted
      • Believing nothing happens without --recurse-submodules
      4. You cloned a repository with submodules but forgot to use --recurse-submodules. Running git submodule update --init gives an error. What is the most likely cause?
      medium
      A. The main repository was cloned with --recurse-submodules
      B. The submodule URLs are missing or incorrect in .gitmodules
      C. You need to delete the main repository and reclone
      D. Submodules cannot be initialized after cloning

      Solution

      1. Step 1: Analyze the error cause

        If submodule URLs in .gitmodules are missing or wrong, update --init fails to fetch them.
      2. Step 2: Check other options for correctness

        The main repository was cloned with --recurse-submodules is false because main repo was cloned without --recurse-submodules; C and D are incorrect as recloning or inability to init is not required.
      3. Final Answer:

        The submodule URLs are missing or incorrect in .gitmodules -> Option B
      4. Quick Check:

        Missing or wrong URLs cause submodule init errors [OK]
      Hint: Check .gitmodules URLs if submodule update fails [OK]
      Common Mistakes:
      • Assuming recloning is always needed
      • Thinking submodules can't be initialized later
      • Ignoring .gitmodules configuration
      5. You cloned a repository with nested submodules but only ran git submodule update --init. What is the best command to ensure all nested submodules are also initialized and updated?
      hard
      A. git submodule update --recursive
      B. git submodule init --recursive
      C. git clone --recurse-submodules
      D. git submodule update --init --recursive

      Solution

      1. Step 1: Understand nested submodules

        Nested submodules require recursive initialization and update to fetch all levels.
      2. Step 2: Identify the correct command

        The command with both --init and --recursive flags initializes and updates all nested submodules properly.
      3. Step 3: Check other options

        git submodule update --recursive misses --init, C is for cloning not updating, D is invalid syntax.
      4. Final Answer:

        git submodule update --init --recursive -> Option D
      5. Quick Check:

        Use --init --recursive to update nested submodules [OK]
      Hint: Add --init --recursive to update all nested submodules [OK]
      Common Mistakes:
      • Forgetting --init when updating submodules
      • Using clone commands after cloning
      • Using invalid flags like --recursive with init only
      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