Windows局域网Git使用方法总结
- A和B和C和… 安装Git
- 如果首次使用, 需要配置下username 和email
- 假设A机作为主仓库, 在A机新建一个空目录作为仓库目录, 例如 GitStore
- A机在GitStore目录打开Git Bash , 输入命令 git init --bare mytest.git
- 上面mytest.git 就是仓库目录名称, 这个随意起
- 将GitStore目录共享打开, 配置权限 ,Everyone这个用户的所有权限都打开
- 确保B , C , …等机器与A处于同一网段下 , 将GitStore目录共享后的地址发给其他人
- 防火墙记得要关 ,
- 在文件管理器中测试是否可以打开, 可能会要求输入账号密码的信息, 这个账号密码, 我测试了下, 貌似随便输入就可以
- 在确定其它机器已经可以访问到共享目录后, 可以自己找位置执行git的克隆操作了
- 克隆地址为: git clone //A机的机器名/共享目录名称/具体项目路径
- 如无意外, 是可以克隆成功了. 而且不同于linux,不需要配置权限,账号等, 可以直接进行push操作
- 因为每次使用都需要这样配置, 其实很烦, 所以呢, 自己写了个脚本,这个脚本是基于我在linux服务器上配置的shell改写的,其实只是做了删减 , 原本打算改为bat格式的,但是发现需要改的挺多的, 所以还是…启动git bash 后执行此脚本即可
# Git 自动创建及同步处理脚本.sh
PRO_NAME=$1 #项目名称,执行脚本时传入
WEB_PATH='/d/wwwroot/' # WEB根目录
echo "WEB根目录: ${WEB_PATH}"
GIT_PATH='/d/GitStore/' # GIT根目录
echo "GIT根目录: ${GIT_PATH}"
WEB_FULL_PATH=${WEB_PATH}${PRO_NAME}
echo "项目路径: ${WEB_FULL_PATH}"
GIT_FULL_PATH=${GIT_PATH}${PRO_NAME}.git
echo "Git路径: ${GIT_FULL_PATH}"
# 创建裸仓库,空仓库理论上来说最直接简单,但是远程提交时会出一系列问题,所以还是老老实实用裸的吧
mkdir ${GIT_FULL_PATH}
git init --bare ${GIT_FULL_PATH}
# 钩子完成了, 接下来要创建项目对应的WEB目录,并执行clone操作
mkdir ${WEB_FULL_PATH}
git clone //$(hostname)${GIT_FULL_PATH} ${WEB_FULL_PATH}
# 服务端Git配置完成咯
echo "仓库地址: //$(hostname)${GIT_FULL_PATH}"
使用方法:
- 务必在git bash 命令行中执行!
- 命令: sh autoGit.sh myProName
- 用途: 根据输入的项目名称自动创建git仓库空目录, 并在配置好的本地项目目录下创建对应名称文件夹并执行克隆操作
- 有个错误,最后echo的仓库地址, 会把盘符带上, 这样的地址发给别人是不正确的, 需要参照自己共享出来的目录路径修改下,因为共享出来的目录大部分是不带盘符符号的,所以一般删个盘符就可以了
其实 ,最初的时候我是要实现其他人提交后自动更新的, 这个在我的linux测试服务器上已经成功了. 这个脚本也是基于那个删减出来的, 但是最后发现一个问题, 在写post-receive的钩子时, 内容都写成功了,但是不知道为什么在win下没有被触发, 目前还不清楚原因在哪儿 , 等以后研究成功的话, 再后续补充
本文主要用于记录操作步骤用于备忘,如有错误还请指正
后记
最终的代码自动同步已经通过了, 也就是说 ,钩子已经能够触发了, 之前无法触发的原因应该有两个可能原因: win创建的文件linux无法正确执行; 钩子文件顶行应该标明是个shell文件;
最后测试在使用脚本编写钩子的时候在顶部加上shell那个说明就行,就是那个#!bin这个,具体我忘了怎么写了
实际测试中, 在我本机一切正常, 也就是说 我在本机单独clone一个项目, 然后提交, 会自动触发钩子并把脚本中配置好的项目目录下的代码执行自动拉取, 并且没有任何问题, 我以为这样就是成了, 没想到最后在另一个机器上测试的时候, 发现会报错提示找不到目录, 前前后后试了各种方法, 试了不下十遍, 最终还是已失败告终, 最后猜测原因可能是其它机器在触发这个钩子的时候, 难道是调用了本机的cmd去执行了而不是shell? 测试了好几遍就是无法成功, 无奈, 先放弃吧, 后续有机会再试