From: Junio C Hamano Date: Wed, 05 Feb 2025 17:24:42 GMT Subject: Re: [PATCH v6 7/7] builtin/clone: teach git-clone(1) the --revision= option Message-ID: In-Reply-To: <20250205-toon-clone-refs-v6-7-0bbc8e6d89fd@iotcl.com> Toon Claes writes: > The git-clone(1) command has the option `--branch` that allows the user > to select the branch they want HEAD to point to. In a non-bare > repository this also checks out that branch. > > Option `--branch` also accepts a tag. When a tag name is provided, the > commit this tag points to is checked out and HEAD is detached. Thus > `--branch` can be used to clone a repository and check out a ref kept > under `refs/heads` or `refs/tags`. But some other refs might be in use > as well. For example Git forges might use refs like `refs/pull/` and > `refs/merge-requests/` to track pull/merge requests. These refs > cannot be selected upon git-clone(1). These examples made the motivation a lot easier to see. Very nice compared to a much earlier edition. > +`--revision=`:: > + Create a new repository, and fetch the history leading to the given > + revision __ (and nothing else), without making any remote-tracking > + branch, and without making any local branch, and point `HEAD` to > + __. When creating a non-bare repository, the revision is checked > + out on a detached `HEAD`. The argument can be a ref name Micronit. I think the resulting repository, even when it is bare, would have its HEAD detached (i.e., instead of being a symbolic ref to a local branch, points directly at a commit object). ... branch, and detach the `HEAD` to __. When creating a non-bare repository, the revision is checked out. The argument can be a ref name ... But then "When ... checked out" probably goes without saying. There is nothing special wrt to bare/non-bare this option affects the behaviour of the command. > @@ -580,8 +581,9 @@ static void update_head(const struct ref *our, const struct ref *remote, > install_branch_config(0, head, remote_name, our->name); > } > } else if (our) { > - struct commit *c = lookup_commit_reference(the_repository, > - &our->old_oid); > + struct commit *c = lookup_commit_or_die(&our->old_oid, > + our->name); > + .git/rebase-apply/patch:62: indent with spaces. our->name); warning: 1 line applied after fixing whitespace errors. Other than that, looking good. Thanks.