8

我正在尝试通过以下方式使用手动定义的工作树设置 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

任何想法将不胜感激!

- - - - 更新 - - - -

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

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

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

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

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

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

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

要运行标准的添加、删除、分支、提交命令,请 cd 进入您的 git 存储库并像往常一样运行您的命令。但是,要运行 stash,请确保 cd 进入您的工作树,然后运行 ​​stash,正如我在上面提到的那样,在命令前面加上 gitdir 的路径。

4

3 回答 3

7

这要么是命令行为中的错误,要么是其错误报告。需要工作树并作为脚本实施的命令1使用以下命令验证其存在:

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

如果您实际上不在工作树内,这将失败这与错误消息所暗示的相反。另一方面,用 C 实现的命令 call 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

于 2011-05-02T23:23:07.853 回答
0

编辑:

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


原答案:

这是一个有点奇怪的命令。试试这个。这要容易得多:

mkdir yourRepo
cd yourRepo
git init
.. edit some files
git add .
git commit -m "First commit"
于 2011-05-02T23:03:57.953 回答
0

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

我的问题似乎与我拥有的驱动器映射有关,该驱动器映射将C:驱动器上的路径映射到P:\

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

我使用 重置它git config --local core.worktree /p,这给了我p:/作为新值,但是那个固定的存储。似乎它不喜欢大写的驱动器号。

原来我只需要cd /c然后cd /p让 git 通知我已经进入了工作树目录。不知道为什么 gitcd对 shell 初始化时敏感但无法检测到我在正确的位置。

于 2013-07-15T15:11:43.073 回答