我已经阅读过一些帖子,这些帖子似乎让我很接近,但并非一直到我喜欢的方式。我有一台服务器。在它上面,我有3个网站:www.domain.com,staging.domain.com和dev.domain.com。我也在local.domain.com上开发,并使用GitHub作为我的核心仓库。
我想把我的git存储库从我的web根目录中删除。我愿意这样做。我正在尝试的是:
/home/user/git/production.git
/home/user/git/staging.git
/home/user/git/development.git
如果通过设置GIT_DIR和GIT_WORK_TREE(我在.bash_profile中导出路径)只有1个站点和回购,我知道怎么做。
似乎我可以在每个存储库的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,它与登台 .git绑定。
答案 0 :(得分:3)
您可以使用gitlink文件,而不是设置$GIT_DIR
。要做到这一点,只需进入每个工作树的根目录并运行:
echo "gitdir: /home/user/git/production.git" > .git
这将导致您的Web根目录中出现.git
文件,但如果有人访问该文件,那么唯一会泄漏的文件就是存储库的路径。这样可以避免根据您所在的目录设置$GIT_DIR
变量来玩游戏。
答案 1 :(得分:0)
你想做什么?
在/home/user/git/production.git
中,它应该将工作目录检测为/home/user/domains/www.domain.com/public.html
,并且推/拉/结帐应该在那里正常工作。不幸的是,git不是通灵的 - 来自没有.git
文件夹的随机目录git甚至不知道在哪里查找配置文件(没有a "gitdir" file,正如我刚从其他答案中了解到的那样)。
您可以随时传递git --git-dir=~git/production.git checkout ...
等等,但我打赌您正在寻找自动化解决方案。
也许尝试在shell脚本中包装git?如果您将其设为~/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
(旁注:为什么你有三个回购?我发现有一个包含三个不同分支名称的repo,以及一个将每个分支检出到其相应目录的脚本更常见。)