如何从另一个目录中使用git?

时间:2012-11-17 12:35:24

标签: git

假设有文件夹结构,如:

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。什么是正确的方法?

3 个答案:

答案 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