3

我已经阅读了许多似乎让我接近但并非完全达到我想要的帖子的帖子。我有一台服务器。在它上面,我有 3 个网站:www.domain.com、staging.domain.com 和 dev.domain.com。我也在 local.domain.com 上进行开发,并使用 GitHub 作为我的中央存储库。

我想让我的 git 存储库远离我的网络根目录。我对如何做到这一点持开放态度。我正在尝试的是:

/home/user/git/production.git 
/home/user/git/staging.git
/home/user/git/development.git

如果通过设置 GIT_DIR 和 GIT_WORK_TREE(我在 .bash_profile 中导出路径),我知道如果只有 1 个站点和 repo 该怎么做。

看来我可以在每个存储库中设置工作树config,例如:

[core]
    bare = false
    worktree = /home/user/domains/www.domain.com/public_html

但是我该如何设置GIT_DIR

因此,如果我在 /home/user/domains/ www .domain.com/public_html 并执行git status等等,它指的是生产git repo。如果我在 /home/user/domains/ staging .domain.com/public_html 中,它与staging .git 相关联。

4

2 回答 2

3

而不是设置$GIT_DIR你可以使用 gitlink 文件。为此,只需进入每个工作树的根并运行:

echo "gitdir: /home/user/git/production.git" > .git

这将.git在您的 Web 根目录中生成一个文件,但如果有人访问该文件,唯一会泄漏的就是存储库的路径。$GIT_DIR这将避免需要根据您所在的目录设置变量来玩游戏。

于 2012-11-02T02:08:27.373 回答
0

你想做什么?

在您的工作目录中时,/home/user/git/production.git它应该检测到工作目录,/home/user/domains/www.domain.com/public.html并且 push/pull/checkout 应该在那里正常工作。不幸的是,git 不是通灵的——从没有.git文件夹的随机目录中,git 甚至不知道在哪里寻找配置文件(没有“gitdir”文件,正如我刚刚从另一个答案中了解到的那样)。

你总是可以通过git --git-dir=~git/production.git checkout ...等等,但我敢打赌你正在寻找一个自动化的解决方案。

也许尝试将 git 包装在 shell 脚本中?如果你把它写成~/bin/autogit

#!/bin/bash
DIR=$(pwd)
if (fgrep -q domains/www.domain.com <<< "$DIR"); then
  git --git-dir=/home/user/git/production.git $@
elif (fgrep -q domains/staging.domain.com <<< "$DIR"); then
  git --git-dir=/home/user/git/staging.git $@
elif (fgrep -q domains/local.domain.com <<< "$DIR"); then
  git --git-dir=/home/user/git/development.git $@
fi
echo "Autogit failed from directory $DIR."
exit 1      

(旁注:为什么你有三个存储库?我发现拥有一个具有三个不同分支名称的存储库以及将每个分支签出到其相应目录的脚本更为常见。)

于 2012-11-02T02:19:32.407 回答