我在远程上有一个空项目,我克隆了它。现在我想开始处理一个分支,testdev
并开始处理它,而无需掌握任何代码。
$ git checkout -b testdev
$ git status
On branch testdev
Initial commit
nothing to commit (create/copy files and use "git add" to track)
现在我尝试将此分支推送到位桶
$ git push origin testdev
error: src refspec testdev does not match any.
error: failed to push some refs to 'https://username@bitbucket.org/myremoterepo.git'
我尝试了git add .
和git commit -m "msg"
但这毫无用处,因为我没有任何文件可以跟踪或提交。那么如何将空分支推送到空项目呢?
如果你的 repo 仍然是空的,你可以尝试创建一个空的提交,以便推送一些东西:
git commit --allow-empty -m "initial commit"
git push -u origin testdev
另请参阅"为什么需要显式推送新分支?
<小时 />Git 2.35(2022 年第 1 季度(允许读取有关为任意存储库定义的远程数据库的信息。
请参阅提交 4a2dcb1、提交 56eed34、提交 085b98f、提交 fd3cb05、提交 e083ef5(2021 年 11 月 17 日(,作者:Glen Choo ( chooglen
(.
(由 Junio C Hamano -- gitster
-- 合并于 2021 年 12 月 10 日 提交 6d1e149(
remote
:如果在存储库中找不到分支,则死亡签名者:Glen Choo
审稿人: 谭咏麟
<小时 />在随后的提交中,我们希望面向外部的函数能够接受"结构存储库"和"结构分支"作为一对.
这对于像pushremote_for_branch()
这样的函数很有用,这些函数需要从remote_state
和分支中获取值,即使分支 ==NULL
.
但是,调用方可能会提供不相关的存储库和分支,这是不支持的行为。为了防止误用,请添加一个
die_on_missing_branch()
帮助程序函数,如果给定分支不是来自给定存储库,则该函数将失效。
通过将分支列表替换为branches_hash
哈希图来加快存在检查速度。像
read_config()
一样,die_on_missing_branch()
只从非静态函数调用;静态函数不太容易被误用,因为它们有很强的约定来保持remote_state
和分支同步。
在 Git 2.37(2022 年第 3 季度(中,配置错误的"branch..remote
"导致配置解析错误。
它避免了branch was not found in the repository
.
请参阅提交 f1dfbd9,提交 91e2e8f (2022 年 5 月 31 日(,作者:Glen Choo ( chooglen
(.
(由 Junio C Hamano 合并 -- gitster
-- 在提交 0b91d56, 10 Jun 2022
remote.c
:不要在 0 长度的分支名称上 BUG((报告人:"Ing. Martin Prantl Ph.D.">
帮助: Jeff King
签名:Glen Choo
<小时 />4a2dcb1("
remote
:如果在存储库中找不到分支,则死亡",2021-11-17,Git v2.35.0-rc0 -- 合并列在批处理 #2 中(引入了一种回归,其中多个具有空分支名称的配置条目,例如[branch ""] remote = foo merge = bar
可能导致 Git 在尝试查找分支跟踪信息时失败。
我们解析配置键来获取(分支名称,分支名称长度(,但是当分支名称子节为空时,我们得到一个虚假的分支名称,例如"
branch..remote
"给出(".remote", 0)
.
我们继续使用虚假的分支名称,就好像它是有效的一样,在 4a2dcb1 之前,这不是问题,因为 length = 0 导致分支名称有效地""
到处。但是,当我们创建分支时,该提交处理
length = 0
不一致:
- 当调用
find_branch()
以检查分支哈希映射中是否存在分支时,它将长度 0 解释为表示它应该在 char 指针上调用strlen
。- 但是插入分支哈希映射的代码路径将长度 0 解释为字符串长度为 0。
这会导致上述错误:
"
- "
branch..remote
" 在分支哈希映射中查找 ".remote
".
由于我们找不到它,我们将""
条目插入哈希映射中。branch..merge
" 在分支哈希映射中查找 ".merge
".
由于我们没有找到它,我们再次尝试将""
条目插入哈希映射.
但是,分支哈希映射中的条目应该追加到,而不是覆盖。- 由于覆盖条目是一个 BUG((,Git 会失败,而不是静默地忽略空分支名称。
通过删除便利
strlen
功能来修复错误,以便 0 表示字符串长度为 0。
在 Git 2.37(2022 年第 3 季度(中,修复git remote
释放后使用(另一个忘记释放(修复。
请参阅提交 323822c,提交 338959d (07 Jun 2022( 由 Ævar Arnfjörð Bjarmason ( avar
(.
(由 Junio C Hamano -- gitster
-- 合并于 提交 fe66167,2022 年 6 月 13 日(
remote.c
:不要在释放循环中取消引用 NULL签名者:埃瓦尔·阿恩菲约泽·比亚梅森
修复了 fd3cb05 中的一个错误("
remote
:将静态变量移动到每个存储库结构中",2021-11-17,Git v2.35.0-rc0 - 合并在批处理 #2 中列出(,free(remote->pushurl[i])
我们在NULL
remote->pushurl
.
本身.
我们在下一个"for
"循环中释放"remote->pushurl
",所以这样做似乎是一个复制/粘贴错误。在此更改之前,GCC 12 的
-fanalyzer
会正确注意到我们将取消引用NULL
在这种情况下,此更改修复了以下内容:remote.c: In function ‘remote_clear’: remote.c:153:17: error: dereference of NULL ‘*remote.pushurl’ [CWE-476] [-Werror=analyzer-null-dereference] 153 | free((char *)remote->pushurl[i]); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ [...]