假设有文件夹结构,如:
repos
/repo1 <-- here is git repository
我做:
cd repos
现在我如何才能在/repo1
目录中repos
使用存储库?我不想做
cd repo1
git status (...)
git commit (...)
...
但是像:
git --git-dir=repo1 (...)
或
git --work-tree=repo1 (...)
我想以该样式执行 ALL git命令,事件git init
。什么是正确的方法?
答案 0 :(得分:4)
您可以设置环境变量$GIT_DIR
。查一查。
答案 1 :(得分:2)
Git具有-C <path>
选项(如tar -C <path>
),可将Git的工作目录更改为path
,然后在该目录中执行该命令。示例运行:
$ mkdir gitrepo
$ git -C gitrepo init
Initialized empty Git repository in /home/foo/gitrepo/.git/
man git
:
-C <path>
像在
<path>
而不是当前工作目录中启动git一样运行。如果给出了多个-C
选项,则相对于前一个-C <path>
解释每个后续的非绝对-C <path>
。此选项会影响期望路径名称为
--git-dir
和--work-tree
的选项,因为它们对路径名的解释将相对于-C
选项导致的工作目录。例如,以下调用是等效的:git --git-dir=a.git --work-tree=b -C c status git --git-dir=c/a.git --work-tree=c/b status
我的Git版本是2.16.1。
答案 2 :(得分:0)
您可以合并--git-dir
和--work-tree
来操作当前目录之外的回购:
git --git-dir=/some/other/dir/.git --work-tree=/some/other/dir status
您也可以将GIT_DIR
设置为@opqdonut,但您还必须设置GIT_WORK_TREE
。请注意,GIT_DIR
是目标存储库中.git
目录的路径,GIT_WORK_TREE
是目标存储库本身。
这一切都非常方便,但这里有一个shell功能,可以让你的生活更轻松:
function git-dir() {
dir=$1
shift
git --git-dir="$dir/.git" --work-tree="$dir" $*
}
这将适用于Bash或Zsh(可能还有其他Bourne派生的shell)。将其放在~/.bashrc
或~/.zshrc
或适合您环境的任何地方。
然后你可以这样做:
git-dir /some/other/dir status
status
是任何Git命令。它也适用于其他参数,它们直接传递给git
命令:
git-dir /some/other/dir remote -v