【问题标题】:fatal: Not a git repository: '.git' error致命:不是 git 存储库:'.git' 错误
【发布时间】:2012-08-11 13:02:44
【问题描述】:

我创建了一个预提交钩子,它获取数据库转储并将其保存在我的应用程序/文件夹下的文件中,该文件也在 git repo 中,保存后我将文件添加到提交列表。以下是我的预提交文件中的代码

    D:/xampp/mysql/bin/mysqldump -u root -pxyz --skip-extended-insert [database] > D:/xampp/htdocs/app/application/[database].sql

cd D:/xampp/htdocs/app/application
git add [database].sql

我尝试通过命令提示符直接运行预提交代码,它可以正常工作,但是当我尝试通过 git bash 提交代码时,我收到此错误

fatal: Not a git repository: '.git' 

我假设它是因为预提交文件中使用了 git 命令,谁能告诉我这个文件有什么问题以及我应该如何修改它

【问题讨论】:

  • cd D:/... 不会带你到D: 驱动器(如果你还没有)。
  • 你确定 pre-commit 挂钩是吗?
  • 是的,预提交钩子写在我的应用程序目录下的 .git 文件下,它们都在 d 驱动器下
  • 您如何确保这一点?脚本所在的位置与它将在什么环境中启动无关。

标签: git hook git-bash


【解决方案1】:

有疑问,在你的钩子中,明确设置git-dirwork-tree 参数:

git --git-dir .git --work-tree . add ...

您甚至可以确定完整路径:

git --git-dir D:/xampp/htdocs/app/application/.git --work-tree D:/xampp/htdocs/app/application/. add ...

这样,您就可以排除那些 git-dirwork-tree 卡在另一条路径中的任何环境问题,而该路径不是您正在进入的存储库之一。
有关该问题的示例,请参见“Calling 'git pull' from a git post-update hook”。

【讨论】:

  • 你能指导我链接或者你能解释一下为什么会这样吗? @vonc
  • @AnandJoshi 我在回答中提到的链接是一个很好的说明:stackoverflow.com/questions/3542854/…。您的钩子从 git 目录或工作树的错误路径开始。每当您将目录从挂钩更改为 另一个 存储库时,最好将这些值(git dir 和工作树)明确设置为您要操作的目标存储库。
【解决方案2】:

我遇到了和你一样的问题,找到了这个解决方案:

而不是做

cd D:/xampp/htdocs/app/application
git add [database].sql

我只是做了

git add D:/xampp/htdocs/app/application/[database].sql

这样我就不会通过 cd-ing 进入另一个文件夹来激怒 git :)

【讨论】:

    【解决方案3】:

    确保您位于具有 .git 文件夹的目录中? 为了确保,尝试运行

    git status
    

    看看发生了什么。如果您仍然收到此类消息,我认为您的 git 尚未设置。

    按照以下步骤进行设置:

    git init
    git add .
    git commit -m "your message"
    git push
    

    【讨论】:

    • 运行 git status 会得到什么?
    • modified : aplication/[database].sql 那是因为每次提交命令完成时都会创建 sql 转储,@kevin 你有任何钩子经验吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-01
    • 1970-01-01
    • 2021-12-12
    • 1970-01-01
    相关资源
    最近更新 更多