【问题标题】:Unable to commit to an empty git repo无法提交一个空的 git repo
【发布时间】:2014-01-26 17:36:48
【问题描述】:

我在 Atlassian Stash 中创建了一个空的 Git 存储库并将其克隆。

$ git clone http://me@myrepo/my/repo.git
...
warning: You appear to have cloned an empty repository.

然后我创建了一些文件,通过git add 添加它们并希望通过git commit 提交。我收到以下错误:

ERROR: Unable to determine active branch in current context !
ERROR: GITLib::Branch::get_current died at line 41

当我 git rev-parse HEAD 时,我得到:

$ git rev-parse HEAD
HEAD
fatal: ambiguous argument 'HEAD': unknown revision or path not in the working tree.

当我发出git branch -a查看是否有远程分支时,输出为空。

让我们在本地创建一个分支:

$ git checkout -b "foo"
Switched to a new branch 'foo'

$ git commit -m "test"
ERROR: Unable to determine active branch in current context !
ERROR: GITLib::Branch::get_current died at line 41

我如何让我的回购处于可用状态?

我尝试发出git commit --allow-emptygit init,但没有任何改变。

编辑:

当我使用git init 在本地创建一个空仓库时,然后git add 并尝试git commit 会发生类似情况:

ERROR: GIT::Command::git_or_die died at line 164

编辑 2:

这似乎是我公司的一个内部问题。如果问题得到解决,我会跟进详细信息。

使用 Git Bash 1.8.5.2 @ Win7。

【问题讨论】:

  • @l0b0 我确实希望这个 repo 是空的。但是根据我在网上阅读的内容,如果我克隆了一个空的仓库,我应该能够在其中创建提交,但显然情况并非如此。
  • 是的,但是你在提交之前git add 是否有任何文件,正如欺骗中提到的那样?可能存在第一次提交不为空的特殊情况。
  • 是的,我做到了。无论是尝试使用--allow-empty 进行空提​​交,还是在之前通过git add 添加内容然后正常提交时,都会发生同样的问题。

标签: git git-bash


【解决方案1】:

与其从 Stash 克隆空存储库,不如尝试在本地(在新目录中)创建一个新存储库:

git init .

添加您的文件并进行第一次提交。新初始化的存储库应该有一个正确的 HEADmaster 分支:

git add file1.txt
git add file2.txt
git commit

然后,将您的空 Stash repo 添加为远程并将 master 推送到那里:

git remote add origin http://me@myrepo/my/repo.git
git push -u origin master

【讨论】:

  • 当我使用git init 在本地创建一个空的仓库时,现在我在尝试提交时得到ERROR: GIT::Command::git_or_die died at line 164。嗯,估计跟公司内部的全局挂钩有关,需要进一步调查。
【解决方案2】:

实际上您猜对了,这完全是您(实际上是我们,因为我负责他们)公司的钩子。

错误:

错误:无法确定当前上下文中的活动分支!
错误:GITLib::Branch::get_current 在第 41 行死亡

当我们尝试查找当前分支的名称时发生。 目前我们正在使用“git branch --list”来查找它,但如果是空仓库,这将返回一个空结果

解决方案需要使用其他方法,可能是这里建议的“获取符号引用”:https://stackoverflow.com/a/2111099 (问题是我们必须支持仍在 Git 1.7.9 中的客户端)

菲尔。

【讨论】:

    【解决方案3】:

    这个问题确实是由我公司的平台团队安装的全局挂钩引起的。该消息看起来像是一些 Git 内部信息,这就是它误导我的原因。

    我所做的是在本地从 .git/hooks 中删除挂钩,并在 repo 创建时停用挂钩复制:

    运行git config --system -e 以打开系统配置文件的编辑器(在我的情况下为C:\Program Files (x86)\Git\etc\gitconfig)并删除以下行:

    [init]
        templatedir = D:/tools/Git/hooks/templates
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-20
      • 2011-04-17
      • 1970-01-01
      • 2021-12-22
      • 2013-10-04
      • 2015-02-28
      • 1970-01-01
      • 2019-09-22
      相关资源
      最近更新 更多