如何在 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 中使用完整路径?的主要内容,如果未能解决你的问题,请参考以下文章
(Java) 在 macbook 中使用 Textmate 时,如何在 File 类中创建完整路径?