如何在 git 中使用完整路径?

Posted

技术标签:

【中文标题】如何在 git 中使用完整路径?【英文标题】:How can I use full paths in 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 有时我会遇到存储库中文件的完整路径。我不想为了区分它们而不得不摆弄选择路径的正确部分,我只想在终端中双击以选择整个文件路径,将其粘贴回去并在行的开头。这要快得多。 【参考方案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

以上是关于如何在 git 中使用完整路径?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Windows 中使用相对路径设置 Git 选项?

如何删除推送的 git 合并提交

如何使用 JavaScript 从完整路径中获取文件名?

(Java) 在 macbook 中使用 Textmate 时,如何在 File 类中创建完整路径?

如果我有完整路径,如何使用 Filesystem.readFile

如何在 MFC 中的 CTreeCtl 中获取一直到 root 的完整路径