git stash 找不到工作区

8
我正在尝试通过以下方式设置具有手动定义工作树的git存储库:
cd /Users/braitsch/repos/project1
git --git-dir=. --work-tree=/Users/braitsch/projects/project1 init

运行以上代码后,我可以通过git add somefile或git add .来添加位于“/ Users / braitsch / projects / project1”中的文件。提交和调用“git branch”都能正常工作。
然而,“git stash list”会抛出以下错误:
致命错误:/ usr / local / Cellar / git / 1.7.4.4 / libexec / git-core / git-stash无法在没有工作树的情况下使用。
用户自定义工作树不支持隐藏吗?
git config --local core.worktree
echoes out : /Users/braitsch/projects/project1

任何想法都将不胜感激! --------更新-------- 正如 @jleedev 在下面指出的那样,当尝试从工作树外部调用 "git stash" 时似乎存在一个错误。然而,我的解决方法是只需进入工作树,然后通过首先在 gitdir 路径之前添加路径来调用 stash。虽然不方便,但以下内容适用于 stash 命令:
git --git-dir="projects/proj1/.git" stash list

这个问题似乎不会困扰其他股票命令,如add、commit、branch等。据我所知,只有"stash"。

如果你想摆脱默认结构,即让.git文件夹嵌套在你的工作树内部,你可能会发现以下步骤很有用:

  1. create a directory where you'd like to store your git repository
  2. create a directory where you want keep the files your going to track (both of these can be anywhere on your file system)
  3. cd into your git repository folder and run:

      git --git-dir=. --work-tree="path-to-your-project-folder" init
    

    This will init a new repository and link it to your external worktree folder.

要运行标准的添加、删除、分支和提交命令,请进入您的git库并像往常一样运行命令。

但是,如果要运行stash命令,请确保进入您的工作目录,然后像上面提到的那样在命令前加上您的gitdir路径。

3个回答

7

这可能是命令行行为或错误报告中的一个错误。需要工作树并且作为脚本实现的命令1会使用以下命令验证其存在:

git rev-parse --is-inside-work-tree

如果你不在工作树内部,那么将失败,这与错误信息所示相反。另一方面,用C实现的命令调用setup_work_tree,它会自动进入工作树。我不知道是否可以安全地修改git-sh-setup中的require_work_tree函数以匹配此功能。

1. git-am.sh git-bisect.sh git-mergetool.sh git-pull.sh git-rebase--interactive.sh git-rebase.sh git-stash.sh git-submodule.sh


谢谢回复,是的,这似乎是一个错误。请查看我对原问题的补充说明。 - braitsch

0

编辑:

尝试设置GIT_WORK_TREE环境变量,将其指向适当的文件夹。


原始答案:

那是一个有点奇怪的命令。试试这个,它更容易:

mkdir yourRepo
cd yourRepo
git init
.. edit some files
git add .
git commit -m "First commit"

1
嗨,那并没有解决问题。 "git init" 只是在当前工作目录中初始化一个新的存储库。我正在尝试通过上面示例中的命令在文件系统的其他位置定义工作树。然而,当你这样做时,git stash 命令会失败。 - braitsch

0

我在使用Git for Windows 1.8.3通过ConEmu时遇到了这个问题。

我的问题似乎与我有一个映射了C:驱动器上的路径到P:\的驱动器映射有关。

git识别映射驱动器的路径为提示符下的/p,但git config --local core.worktree的设置返回P:/

我使用git config --local core.worktree /p来重置它,这给了我新值p:/,但那只修复了stash。看起来它不喜欢大写驱动器字母。

结果我只需要先执行cd /c然后再执行cd /p就能让git注意到我已进入工作树目录。不确定为什么git对cd如此敏感,但它不能在shell初始化时检测到我处于正确位置。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接