【问题标题】:Git won't show log unless I am in the project directory除非我在项目目录中,否则 Git 不会显示日志
【发布时间】:2014-06-06 07:08:37
【问题描述】:

当我在不同的目录中时,我正在尝试拨打git log。我通过.git所在的位置

git log /Users/Leica/proj1

但它说“不是 git repo”。如果我 cd 进入这个目录,它工作正常

cd /Users/Leica/Proj1
git log

我不清楚。 git log documentation

git log [[--] <path>…]

那我做错了什么?

【问题讨论】:

  • Git 命令通常不起作用,除非您在 Git 跟踪的项目目录中使用它们。
  • 那我想知道为什么文档中提到了 log 命令的路径...还是我误解了 Git 中 log 函数中的路径选项?
  • 这是存储库中的文件路径,而不是存储库本身的路径。
  • 嘎;所以我误解了option参数;我的坏

标签: git


【解决方案1】:

这就是 git 的工作原理。它希望从工作副本内部运行(不必位于其根目录)。

如果你真的必须这样做(但为什么?),你可以这样做

$ git --git-dir=/Users/Leica/proj1/.git log

日志命令的“路径”选项是指存储库中的文件路径(根在存储库根目录,而不是您的文件系统根目录)。它将日志的输出限制为与这些文件相关的提交。

【讨论】:

  • 我明白了;我不清楚为什么它不接受该命令,此时我想知道为什么日志文档有路径作​​为选项,如果你不能立即使用它。谢谢!
  • (but why?) 因为我在 shell 脚本中?
  • 我想你是对的,我试图找到一个角落案例,但我没有。 触摸。 :) 有人可能会争辩说你以后应该小心cd -。但这又是一个脚本,无论如何都应该小心。无论如何,感谢您添加那条信息。
【解决方案2】:

Git 日志的路径选项仅用于过滤 git 存储库中的目录。 例如

cd /Users/Leica/Proj1
git log ChildDirectory

只会为您提供有关 Proj1/ChildDirectory 的日志,因此如果 Proj1 目录中存在不影响 ChildDirectory 的提交,则不会出现。

如果你想从不同的目录使用 git,你需要传递--git-dir=&lt;pathToRepository&gt; 选项。

【讨论】:

    【解决方案3】:

    Git 需要一个可以运行的存储库,如 Thilo's answer 所示。因此,您可以通过三种方式告诉 Git 在哪里可以找到存储库:

    1. --git-dir=&lt;repoPath&gt; 标志,正如 Thilo 回答的那样。

    2. GIT_DIR 环境变量。

    3. cd 进入包含存储库目录.git 的项目目录。

    根据official Linux Kernel Git documentationGIT_DIR默认设置为寻找.git目录(在当前工作目录中?):

    如果设置了GIT_DIR 环境变量,那么它会指定一个要使用的路径,而不是默认的.git 用于存储库的基础。 --git-dir 命令行选项也设置此值。

    【讨论】:

    • 感谢您的澄清,我的假设是您可以将路径传递给 git repo 本身;因此我误解了如何正确使用该选项及其参数。谢谢
    猜你喜欢
    • 2016-02-15
    • 2019-08-26
    • 1970-01-01
    • 1970-01-01
    • 2017-11-25
    • 1970-01-01
    • 2023-03-14
    • 2014-04-15
    • 1970-01-01
    相关资源
    最近更新 更多