Re: [PATCH v2] clone: add a --no-tags option to clone without tags

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

Ævar Arnfjörð Bjarmason wrote:

> Add a --no-tags option to "git clone" to clone without tags. Currently
> there's no easy way to clone a repository and end up with just a
> "master" branch via --single-branch, or track all branches and no
> tags. Now --no-tags can be added to "git clone" with or without
> --single-branch to clone a repository without tags.

Now I've read the discussion from v1, so you can see my thoughts
evolving in real time. :)

The above feels a bit misleading when it says "there's no easy way to
clone a repository and end up with just a 'master' branch".
--single-branch does exactly that.  Some annotated tags *pointing to
its history* come along for the ride, but what harm are they doing?

In other words, I think the commit message needs a bit more detail about
the use case, to say why omitting those tags is useful.  The use case
is probably sane but it is not explained.  A side effect (and my main
motivation) is that this would make it crystal clear to people looking
at the patch in history that it is talking about tags that are part of
"master"'s history, not tags pointing elsewhere.

> Before this the only way of doing this was either by manually tweaking
> the config in a fresh repository:

Usually commit messages refer to the state of things without some
patch using the present tense --- e.g. "Without this patch, this
--no-tags option can be emulated by (1) manually tweaking the config
in a fresh repository, or (2) by setting tagOpt=--no-tags after
cloning and deleting any existing tags".

[...]
> Which of course was also subtly buggy if --branch was pointed at a
> tag, leaving the user in a detached head:
>
>     git clone --single-branch --branch v2.12.0 git@xxxxxxxxxx:git/git.git &&
>     cd git &&
>     git config remote.origin.tagOpt --no-tags &&
>     git tag -l | xargs git tag -d

At this point I lose the trail of thought.  I don't think it's
important to understanding the patch.

> Now all this complexity becomes the much simpler:
>
>     git clone --single-branch --no-tags git@xxxxxxxxxx:git/git.git
>
> Or in the case of cloning a single tag "branch":
>
>     git clone --single-branch --branch v2.12.0 --no-tags git@xxxxxxxxxx:git/git.git

Nice.

[...]
>  Documentation/git-clone.txt | 14 ++++++++-
>  builtin/clone.c             | 13 ++++++--
>  t/t5612-clone-refspec.sh    | 73 +++++++++++++++++++++++++++++++++++++++++++--
>  3 files changed, 95 insertions(+), 5 deletions(-)
> 
> diff --git a/Documentation/git-clone.txt b/Documentation/git-clone.txt
> index 30052cce49..57b3f478ed 100644
> --- a/Documentation/git-clone.txt
> +++ b/Documentation/git-clone.txt
> @@ -13,7 +13,7 @@ SYNOPSIS
>  	  [-l] [-s] [--no-hardlinks] [-q] [-n] [--bare] [--mirror]
>  	  [-o <name>] [-b <name>] [-u <upload-pack>] [--reference <repository>]
>  	  [--dissociate] [--separate-git-dir <git dir>]
> -	  [--depth <depth>] [--[no-]single-branch]
> +	  [--depth <depth>] [--[no-]single-branch] [--no-tags]

Can I pass --tags to negate a previous --no-tags?

[...]
> +--no-tags::
> +	Don't clone any tags, and set
> +	`remote.<remote>.tagOpt=--no-tags` in the config, ensuring
> +	that future `git pull` and `git fetch` operations won't follow
> +	any tags. Subsequent explicit tag fetches will still work,
> +	(see linkgit:git-fetch[1]).
> ++
> +Can be used in conjunction with `--single-branch` to clone & maintain

nit: s/&/and/

[...]
> +test_expect_success 'clone with --no-tags' '
> +	(
> +		cd dir_all_no_tags && git fetch &&
> +		git for-each-ref refs/tags >../actual

nit: this would be easier to read with the 'cd' and 'git fetch' on
separate lines.

[...]
> +test_expect_success '--single-branch while HEAD pointing at master and --no-tags' '
> +	(
> +		cd dir_master_no_tags && git fetch &&

Likewise.

> +		git for-each-ref refs/remotes/origin |
> +		sed -e "/HEAD$/d" \
> +		    -e "s|/remotes/origin/|/heads/|" >../actual

Can $/ be expanded by the shell?

The rest looks sensible.

Thanks and hope that helps,
Jonathan



[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]