当我尝试将所有分支和标签推送到远程时,git 发出以下错误:
# git push origin --all --tags
fatal: --all and --tags are incompatible
Run Code Online (Sandbox Code Playgroud)
但是,这有效:
# git push origin refs/heads refs/tags
Everything up-to-date
Run Code Online (Sandbox Code Playgroud)
问题:
为什么 git 命名 push-all-branches--all而不是--branchesor --heads?git push origin --all只推送分支,而不是所有引用。这种命名背后的哲学是什么?这是否意味着标签真的是 Git 存储库中的二等公民?
为什么 git 不允许同时使用--alland --tags?
附注。我知道有一个--follow-tags选择。我知道有些人不建议推送所有标签,但此线程与此无关。
man git-push:
- 全部
推送所有分支(即 refs/heads/ 下的 refs);不能与其他 <refspec> 一起使用。
--标签
除了在命令行中明确列出的 refspecs 之外,refs/tags 下的所有 refs 都会被推送。
我刚刚将我们的存储库从github转换为内部gitlab.我开始得到一个裸的本地存储库,我已经能够获得一个新的master到gitlab.
在我的本地存储库中,git标记显示了我在github上的标记列表.但是没有一个标签出现在gitlab中.
我有GitLab 6.6.0.pre fe6c534.
所以我如何将我的标签导入gitlab?
Git的默认行为不是将标记从本地存储库推送到关联的远程存储库.在本回答中,解释了如何为单个存储库更改此行为.
我的问题是,为什么这是Git的设计行为?特别是设置自动推送标签的缺点是什么?
我写了下面的git别名来将我的提交推送到origin并用传递给别名的参数标记它,然后推送标签
pomt = !git push origin master && git tag '$1' && git push --tag
Run Code Online (Sandbox Code Playgroud)
用法:
git pomt myTagGoesHere
Run Code Online (Sandbox Code Playgroud)
但是,这会因错误而失败
致命的'myTagGoesHere'似乎不是一个git存储库
我已经发现还有其他选项可以同时实现这个 推送git提交和标签
但我很好奇我创建的别名有什么问题,并且仍然想知道如何这样做只是为了学习如何使用参数创建别名
这是在Windows上,顺便说一句,如果这对shell脚本有任何影响
在python脚本中,我尝试在git存储库上创建并将标记推送到origin.我使用gitpython-1.0.2.
我能够检查一个现有的标签,但无法找到如何将新标签推送到远程.
非常感谢
前段时间我分叉了一个 git repo。从那以后,有几个新的提交到 master 分支。https://help.github.com/articles/syncing-a-fork/解释了如何将上游主分支与本地主分支同步,然后将这些提交推送到我的分支。
但是它没有提到如何同步新的上游分支。当我最初在 github 上 fork 项目时,它看起来像它带来了所有当时的分支。
我看过有关如何一次同步一个分支的解释。有没有办法一次同步所有新旧分支?
I haven't made any commits to my fork. Thus I am looking for a fast forward sync.
Edit: Another way to say this:
I want
git ls-remote origin
Run Code Online (Sandbox Code Playgroud)
to match
git ls-remote upstream
Run Code Online (Sandbox Code Playgroud)
This would include branches and tags.
我一直在尝试对 使用相对较新的--atomic选项git push,但它对我不起作用,即,即使其他引用失败,它仍然允许某些引用更改。
从这里的差异看来,远程服务器上也需要一些东西来接受原子标志。虽然这是有道理的,但似乎默认是使用它。
我正在使用 http 协议推送到 BitBucket 服务器实例。服务器上当前的 Git 版本是“git version 2.8.1”。
是否需要在服务器上配置某些内容才能使其正常工作?
编辑:
下面是一个可以复制的例子。
服务器上的配置:
$ git --version
git version 2.8.1
$ git config --get-all --show-origin receive.advertiseatomic
file:/home/bitbucket/.gitconfig 1
Run Code Online (Sandbox Code Playgroud)
在客户端:
$ git --version
git version 2.8.2.windows.1
$ git push <local-path>/.git HEAD:refs/heads/wwww HEAD:refs/heads/zzz --force-with-lease=zzz --atomic
error: atomic push failed for ref refs/heads/zzz. status: 7
fatal: The remote end hung up unexpectedly
To <local-path>/.git
! [rejected] HEAD -> wwww (atomic push failed)
! [rejected] …Run Code Online (Sandbox Code Playgroud) 在谈到Git时,我有点像新秀.所以我决定阅读Scott Chacon的Pro Git.BTW好书,强烈推荐它.
无论如何得到了关于签名标签的部分.要使用GPG对标签进行签名,您必须设置私钥.但是,当我跑:
git tag -s v1.6 -m "my signed 1.6 tag"
Run Code Online (Sandbox Code Playgroud)
我得到以下内容:
C:\Users\Name\Desktop\git>git tag -s v1.6 -m "my signed 1.6 tag"
gpg: error loading `iconv.dll': The specified module could not be found.
gpg: please see http://www.gnupg.org/download/iconv.html for more information
gpg: skipped "Name <name@gmail.com>": secret key not available
gpg: signing failed: secret key not available
error: gpg failed to sign the data
error: unable to sign the tag
Run Code Online (Sandbox Code Playgroud)
所以,我完成了错误消息告诉我要做的事情,然后转到链接并按照说明进行操作.我将iconv.dll复制到包含gpg.exe(\ Git\bin)的文件夹中.再次执行命令并得到:
C:\Users\Name\Desktop\git>git tag -s v1.6 -m "my signed 1.6 tag" …Run Code Online (Sandbox Code Playgroud) 我知道git fetch --tags会将所有标签从远程获取到本地。
我不确定git pull默认情况下是否会从远程获取标签,所以会吗?
在Git中,我创建了一些本地标签,其中只有一些我想推送到原点.
过了一会儿,我想检查推送到遥控器时错过了哪些标签.
我们是否有命令显示本地仓库中的所有标签但尚未推送到远程仓库?
谢谢.
我需要从 gitlab 备份中恢复一些存储库。此备份包含所有存储库的 .bundle 文件。如何恢复包含所有分支的完整存储库?
如果我跑,git bundle list-heads myfile.bundle我可以看到所有的分支。
我想使用所有分支在本地恢复该 repo,以将其推送到新的/空的 gitlab 存储库。
我尝试使用 git clone、git pull 我能找到的所有其他技巧,但这只会导致一个只有 master 分支的 repo。