克隆没有标签的回购?

lov*_*ove 8 git git-clone git-tag

我想创建没有使用clone的标签的裸git项目.但是通过谷歌知道没有像" --no-tags" 这样的选项.

有没有办法克隆没有像下面的标签?

$ git clone {path}/test.git --no-tags --mirror
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激!!:)

lov*_*ove 10

我也通过一些小径和谷歌搜索得到它.

我用下面的步骤来制作它.

1)初始化一个裸仓库:

mkdir project
cd project
git init --bare 
Run Code Online (Sandbox Code Playgroud)

2)添加遥控器并为其配置正确的refspec:

git remote add origin <REPO_URL> 
git config remote.origin.fetch +refs/heads/*:refs/heads/* 
git config remote.origin.tagopt --no-tags 
Run Code Online (Sandbox Code Playgroud)

3)获取数据:

git remote update origin 
Run Code Online (Sandbox Code Playgroud)

如果你想在第一次获取时省略标记,那么省略设置remote..tagopt变量并使用

git fetch --no-tags 
Run Code Online (Sandbox Code Playgroud)

用于获取数据.请注意,除非在此之前设置remote..tagopt配置选项,否则不带"--no-tags"的下一次提取将获取可自动获取的标记.


Von*_*onC 6

使用Git 2.13.x/2.14(2017年第2季度),这将是可能的(即:克隆没有标签)

提交1524ccd,提交0dab246,提交28d67d9由(2017年4月26日)ÆvarArnfjörðBjarmason( )avar.
(通过合并JUNIOÇ滨野- gitster-提交a1fdc85,2017年16月)

clone:添加一个--no-tags没有标签的克隆选项

添加--no-tags克隆选项而不提取任何标记.

如果没有这种更改,就没有简单的方法来克隆存储库而不需要获取其标记.

--single-branch克隆提供主远程分支时,将另外跟踪和检索标记.
现在--no-tags可以添加--single-branch克隆没有标记的存储库,并且只跟踪单个上游分支.

此选项--single-branch也可以正常工作,并且将执行普通克隆但不提取任何标记.

许多git命令根据引用的数量支付一些固定的开销.例如,创建〜40k标签linux.git将导致命令像git log -1 >/dev/null在一秒钟内运行而不是在几毫秒内运行,此外还有许多其他事情会变慢,例如" git log <TAB>"与bash完成将慢慢显示~40k引用而不是1 .

用户可能希望避免所有这些开销,只需使用这样的存储库来浏览"主"分支,或类似CI工具之类的东西可能希望保持一个分支是最新的而不关心任何其他引用.

如果没有这种改变,实现这一目标的唯一方法是通过在新的存储库中手动调整配置:

git init git &&
 cat >git/.git/config <<EOF &&
 [remote "origin"]
     url = git@github.com:git/git.git
     tagOpt = --no-tags
     fetch = +refs/heads/master:refs/remotes/origin/master
 [branch "master"]
     remote = origin
     merge = refs/heads/master
 EOF
 cd git &&
 git pull
Run Code Online (Sandbox Code Playgroud)

这需要硬编码" master"名称,这可能不是主要 --single-branch人员可能检索到的,或者通过tagOpt=--no-tags在克隆和删除任何现有标签后立即设置 :

git clone --single-branch git@github.com:git/git.git &&
 cd git &&
 git config remote.origin.tagOpt --no-tags &&
 git tag -l | xargs git tag -d
Run Code Online (Sandbox Code Playgroud)

当然,如果--branch指向标签,那么当然也是巧妙的错误,让用户处于一个独立的头部:

git clone --single-branch --branch v2.12.0 git@github.com:git/git.git &&
 cd git &&
 git config remote.origin.tagOpt --no-tags &&
 git tag -l | xargs git tag -d
Run Code Online (Sandbox Code Playgroud)

现在所有这些复杂性变得更加简单:

git clone --single-branch --no-tags git@github.com:git/git.git
Run Code Online (Sandbox Code Playgroud)

或者在克隆单个标签"branch"的情况下:

git clone --single-branch --branch v2.12.0 --no-tags git@github.com:git/git.git
Run Code Online (Sandbox Code Playgroud)


tor*_*rek 1

“镜子”意味着“标签”:没有后者就不可能有前者。

从根本上来说,--mirror意味着:

  • 一个裸克隆,与
  • 获取读取的参考规范refs/*:refs/*

由于标签位于 中refs/tags/,因此上面的第二个项目符号意味着标签被复制。

为了避免复制标签,您将需要一组不同的参考规范。选择您希望复制的(也许refs/heads/*refs/notes/*例如)并在您的裸克隆中明确列出它们。(您可以首先进行完整--mirror克隆,然后编辑配置文件并删除任何不需要的已复制引用。)

您可能还想设置为禁用自动“匹配标签”获取。remote.name.tagopt--no-tags