基于@VonC's answer的具体示例。
设备
LOCAL
=您的本地机器,即C:\MyDocuments\Whatever
PORTABLE
= 其他东西,例如 USB 密钥
回购协议
LOCAL/myproject/
= 你工作的“日常”存储库,推送到 github 等
PORTABL/myproject.git
= 裸露的“集中式集线器”(在 USB 密钥上)
PORTABLE/myproject-preview
= 包含来自 repo 的最新代码的非 git 文件夹
PORTABLE/myproject-working
= 一个 git repo,你可以在不在家的时候工作(基本上和LOCAL/myproject
文件结构
注意:我在我的计算机上的一个文件夹中测试这一切,而不是实际的单独驱动器,YMMV
-LOCAL/
-myproject/
-.git/
- other files
-PORTABLE/
-myproject.git/
-hooks/
-info/
<etc>
-myproject-preview/
- other files
-myproject-working/
-.git
- other files
配置
近似命令...假设您在这次头脑风暴之前首先在本地工作
# start at home
cd LOCAL
git init myproject
<do some work>
# suddenly you realize you want a portable hub
cd PORTABLE
# ready the dump locations (depending on what you want)
mkdir myproject-preview
mkdir myproject-working
# start the hub
git init myproject.git --bare
<make the post-receive hook, see below *not cool enough to do it from the command line>
# backup home
cd LOCAL/myproject
git remote add origin PORTABLE/myproject.git
git push origin master #this shows up in ...preview and ...working
<do more work>
接收后挂钩
从@VonC 的其他答案和随机 coderwall中精心复制。
您可以两者都做,或者只选择“预览模式”或“便携式工作”。
注意相对路径的使用(因为我们在PORTABLE/myproject.git/hooks/
)。
#!/bin/bash
while read oldrev newrev refname
do
branch=$(git rev-parse --symbolic --abbrev-ref $refname)
if [ "master" == "$branch" ]; then
# preview mode
git --git-dir=../myproject.git --work-tree=../myproject-preview checkout -f
# portable working mode (https://coderwall.com/p/oj5smw)
GIT_WORK_TREE=../myproject-portable git checkout -f $branch
fi
done