git-stash无法找到工作树

时间:2011-05-02 22:57:47

标签: git git-stash

我正在尝试通过以下方式设置一个带有手动定义的工作树的git存储库:

cd /Users/braitsch/repos/project1
git --git-dir=. --work-tree=/Users/braitsch/projects/project1 init

运行上面后我可以添加位于“/ Users / braitsch / projects / project1”的文件,通过:git add somefile或git add。
提交工作正常,调用“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

任何想法都会非常感激!

-------- -------- UPDATE

正如@jleedev所述,尝试从工作树外部调用“git stash”时似乎存在错误。但是我的解决方法是只需cd进入工作树,然后首先在gitdir的路径前面调用stash。不方便,我知道,但以下适用于stash命令:

git --git-dir="projects/proj1/.git" stash list

这个问题似乎没有困扰其他股票命令,如添加,提交,分支等。就我所知,只是“藏匿”。

如果您希望摆脱将.git文件夹嵌套在工作树中的默认结构,您可能会发现以下步骤非常有用:

  1. 创建一个您希望存储git存储库的目录
  2. 创建一个您希望保留要跟踪的文件的目录 (这些都可以在您的文件系统中的任何位置)
  3. cd进入你的git repository文件夹并运行:

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

    这将启动一个新的存储库并将其链接到您的外部工作树文件夹。

  4. 运行标准的添加,删除,分支,提交命令,cd进入您的git存储库并像往常一样运行命令。 但是,要运行存储,请确保进入您的工作树,然后运行存储,如上所述,将命令作为gitdir路径的前缀。

3 个答案:

答案 0 :(得分:6)

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

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

如果您实际上工作树中,则会失败,这与错误消息所暗示的相反。另一方面,在C中实现的命令调用setup_work_tree,它会自动chdir进入工作树。 require_work_tree中的git-sh-setup函数是否可以安全地更改为匹配,我不知道。

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

答案 1 :(得分:0)

编辑:

尝试将GIT_WORK_TREE环境变量设置为指向合适的文件夹。


原始答案:

这有点奇怪的命令。试试这个。这更容易:

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

答案 2 :(得分: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:/作为新值,但固定的存储。好像它不喜欢资本驱动信。

原来我只需要cd /c然后cd /p就可以通知我已进入工作树目录。不确定为什么git对cd很敏感,但是在初始化shell时无法检测到我在适当的位置。