【问题标题】:How can I use full paths in git?如何在 git 中使用完整路径?
【发布时间】:2012-01-23 12:59:20
【问题描述】:

这个命令可以正常工作:

git diff relative/path/to/file.ext

但如果我使用完整路径,git 会说该路径“在存储库之外”:

git diff /full/path/then/relative/path/to/file.ext

我猜 git 在 /full 中找不到 .git 目录,所以这就是它失败的原因。

但是如何让 git 像 subversion 一样理解完整路径?

更新:git 版本 1.7.0.5

更新:这些文件始终在我的存储库中,我当前的目录也在我的存储库中!它仍然给出该错误。

【问题讨论】:

  • 您能解释一下为什么需要这个吗?
  • “外部存储库”通常意味着当前目录不是 git 存储库的一部分,因此 git 命令不起作用。切换到 git 工作目录,它应该适用于任何路径。
  • @Mat 有时我会遇到存储库中文件的完整路径。我不想为了区分它们而不得不摆弄选择路径的正确部分,我只想在终端中双击以选择整个文件路径,将其粘贴回去并在行的开头。这要快得多。

标签: git path diff relative-path


【解决方案1】:

您是否碰巧使用了不区分大小写的文件系统,例如MacOSX 的默认设置? git rev-parse --show-toplevel 是否向您显示不同大小写的路径,例如/full/path/Then。在这种情况下,您必须重命名 Then,使用 mv /full/path/Then /full/path/then 或调用 git diff /full/path/Then/relative/path/to/file.ext

如果重命名目录,则在没有程序打开目录或其内容时这样做会更安全。

【讨论】:

    【解决方案2】:

    你使用的是哪个版本的 git?无论路径的格式如何,它都应该可以工作,即

    cd git
    git diff -- git.c
    git diff -- ~/git/git.c
    

    但是您必须在 git 存储库中才能使用它!如果您绝对需要从存储库外部执行 git 命令,请使用 --work-tree--git-dir 开关:

    git --work-tree=~/git --git-dir=~/git/.git diff -- git.c
    git --work-tree=~/git --git-dir=~/git/.git diff -- ~/git/git.c
    

    【讨论】:

    • 版本 1.7.0.5。在您的示例中, ~/git 是您的 git 工作目录的根目录吗?我尝试了您的所有建议,但仍然遇到同样的错误。
    • @WillSheppard: 是的~/git 是包含工作树和.git 目录的顶级目录
    • 我的 git 不理解 ~ in --work-tree;我必须使用完整路径。
    【解决方案3】:

    如果您想在 git 存储库之外对文件进行比较,您应该使用 opendiff 之类的比较工具,并将存储库中的文件与存储库之外的其他文件进行比较。

    您无法比较外部文件,因为 git 不会在文件中“思考”。

    【讨论】:

    • 你可以,只需运行git diff --no-index -- file1 file2
    猜你喜欢
    • 2019-09-23
    • 1970-01-01
    • 1970-01-01
    • 2015-08-16
    • 2021-02-28
    • 1970-01-01
    • 2021-06-17
    • 2020-03-13
    • 2016-12-06
    相关资源
    最近更新 更多