I cannot clone git tree

17,127

Solution 1

Git cannot clone a tree directly. You need to clone the entire repository, and then check out a commit that uses the tree you want. For the sake of reducing confusions, though, do note that there is a difference between the terms "tree" and "commit", though:

  • A tree is a Git object representing a directory, and contains links to blobs (files) and other trees. A tree is not necessarily the root directory of the repository.
  • A commit object contains a link to the root tree of the repository, and some extra information such as commit message, dates and other headers.

You can only check out commits. Few Git commands deal directly with tree objects (git cat-file and git ls-tree being among the exceptions). However, the object ID in your GitHub URL is indeed the ID of a commit, so that's not a problem.

What you can do, then, is check out the commit you want into a new branch after you've cloned the repository:

git checkout -b test-branch d2077e21

If the problem you're trying to solve is just fetching a single commit (or tree) from a remote repository, then you're out of luck, because Git's remote protocol does not support that operation. If anything, if you can insert a branch into the remote repository at the commit you want, you can clone that branch directly, without any history:

git clone -b test-branch --depth 1 https://github.com/cer/event-sourcing-examples

If you can't do that, however, then you're still out of luck. The remote protocol only allows referencing named refs, not arbitrary commits.

Solution 2

Check if below things helps.Am using a GIT bash here.

  1. Clone the repository.

    git clone https://github.com/cer/event-sourcing-examples.git

  2. Enter that directory

    cd event-sourcing-examples/

  3. Switch the branch(i am assuming by tree you mean branch)

    git checkout wip-vagrant wip-vagrant is a branch name

  4. To get the update you have to issue a pull command.

    git pull

If you directly want to clone the branch then follow the instructions in above comment(Micheal).

Solution 3

git clone -b <branch> <remote_repo>

Example:

git clone -b my-branch [email protected]:user/myproject.git

Alternative (no public key setup needed):

git clone -b my-branch https://[email protected]/username/myproject.git

Solution 4

If your goal is just to get a copy of the repo at a particular commit...

While you can't use clone, you can download a zip file of the repo at a particular commit.

This method works on GitHub.

This and other approaches can be found at: https://coderwall.com/p/xyuoza/git-cloning-specific-commits

TL;DR

Navigate to the tree view of the sha you want.

https://github.com/<repo_name>/tree/<commit_sha>

Download the zip file. Don't clone.

Github Tree View

 Open the repo and click the "commits" link 
   (in the bar that says "commits branches packages, etc.)

 Select the commit you want. This will take you to the view showing the changes.
    In the url you will see something like this:
    https://github.com/Colt/webpack-demo-app/commit/eb66c0dc93141080f5b1abb335ec998a1e91d72e

 - Note the sha in the url is preceeded by the word "commit". 
   Replace the word "commit" with the word "tree" to put yourself in the
   tree view. 

 - Finally, click on the green "Clone or download" button
   and Download the ZIP. Don't try to clone.

   This will download the entire repo as it was at that commit.


Share:
17,127
Victor
Author by

Victor

Updated on June 08, 2022

Comments

  • Victor
    Victor almost 2 years

    I have a question about git, I tried to clone a tree but without success.

    git clone https://github.com/cer/event-sourcing-examples/tree/d2077e21aa677a00095f90250470ff011c132ab8/java-spring
    

    I cloned the project

    git clone https://github.com/cer/event-sourcing-examples
    

    and I tried to switch to that tree but no effect

    Would you have any suggestions ?

    Best regards