背景
有一个共享文件夹,里面的文件需要周期性更新。于是想将其作为一个Git repo实现版本管理。
远程仓库
初始化远程仓库:
git init
这里不建裸仓库(有些教程会加上--bare参数建立裸仓库),因为裸仓库没有工作目录,只有.git子目录,看不到文件。
还需要加上配置,解决非裸仓库作为仓库的问题:
git config --global receive.denyCurrentBranch ignore
进入.git/hooks目录,加上post-update钩子(把.sample后缀去掉才能生效):
# 把自带的这句注释掉,这句是用来确保用HTTP克隆仓库(非裸仓库加上这句话会使后续脚本失效)
# exec git update-server-info
unset GIT_DIR
cd ..
git checkout -f # 关键是这句
git checkout -f的作用:当使用git init初始化仓库时,该远程仓库也包含work tree,在本地push到远程master后,如果远程仓库也在master上,push的结果不会体现在work tree上(如果当时在其他分支上,可以体现)。表现就是log存在,但新增文件不存在(显示为deleted)。git checkout -f语句就是用于清除本地的changes。
本地仓库
初始化本地仓库:
git init
添加远程仓库:
git remote add rmprogress ${文件夹路径}
然后就可以顺利push/pull啦