现在越来越多项目使用git, 本文记录git常用操作及在linux里自动拉取相应的资料, 再通过samba系统提供给其它人员使用
一. git拉取分支,以拉取redis分支2.2为例子
git init
git remote add origin https://github.com/redis/redis.git
git fetch origin 2.2
git checkout -b 2.2
git pull origin 2.2
git lfs pull
注:lfs没有安装,需安装:git lfs install
二. 拉取指定文件
1.git pull 指定文件或文件夹:默认git pull会拉取整个库,如果需要拉取指定文件或文件夹,
1.1. 设置core.sparsecheckout 为true 即
git config core.sparsecheckout true
1.2. 在.git/info/sparse-checkout文件中(如果没有则创建)添加需拉取的文件或文件夹
echo src>>.git/info/sparse-checkout
2.git 拉取指定lfs文件:如只想拉取images 文件夹,而不想获取 videos 文件夹
2.1. 拉取指定目录下的LFS对象
git config lfs.fetchinclude 'images/**'
2.2. 排除指定目录下的LFS对象
git config lfs.fetchexclude 'videos/**'
三. 提交git修改
1.将xx文件添加到暂存区:git add xx
注: 提交所有改动: git add -A .
git commit -m "注释"
git push origin 2.2
四. git常用命令
git status
git log
git lop -p
git diff
git branch -a
git remote -v
git branch
五. 自动拉取
1.拉取脚本
1.1. 配置文件:td_update_config.txt
#n表示等待n秒后进行更新,n 必须大于等于0,小于0时不进行更新,时间误差为一分钟
wait_second=n
1.2. 如果git文件名为汉字,为了使用脚本处理,可以添加软链接
ln -s /data/xxx /data/Ln/TrunkDataTable
1.3. 更新脚本:td_update.sh
#!/bin/sh
#提取这次更新的相应日志到td_git.log
function getGitLog()
{
cat /tmp/git_log.tmp.log | while read line
do
line_num=${#line}
if [[ $line_num > 0 ]];then
para_0=`echo $line | cut -d ':' -f 1`
if [[ $para_0 == "Date" ]];then
para_1=`echo $line | cut -d ':' -f 2`
para_1_=`echo $para_1|awk '{sub("^ *", "");print}'`
para_2=`echo $line | cut -d ':' -f 3`
para_3=`echo $line | cut -d ':' -f 4`
para="\""$para_1_":"$para_2":"$para_3"\""
#仅提取这个时间后的提交记录
echo "git log --after=$para>td_git.log">/tmp/get_git_log.sh
chmod +x /tmp/get_git_log.sh
/tmp/get_git_log.sh
break
fi
fi
done
}
#会在crontab里调用,路径使用绝对路径. 自己用时需换成自己的路径
cd /data/Ln/TrunkDataTable
#获取td_update_config.txt配置的等待更新时间,单位为秒
for line in `cat ./td_update_config.txt`
do
line_num=${#line}
if [[ $line_num > 0 ]];then
para_0=`echo $line | cut -d '=' -f 1`
para_1=`echo $line | cut -d '=' -f 2`
if [[ $para_0 == "wait_second" ]];then
wait_second=$para_1
fi
fi
done
#只有等待时间大于0时才执行更新操作
if [[ $wait_second -gt 0 ]];then
#等待相应的时间,单位秒
sleep $wait_second
#提取当前版本相应的日志
git log -p -1>/tmp/git_log.tmp.log
#进行更新
git pull
git lfs pull
#提取相应日志到git日志
getGitLog
#记录本次更新到历次更新日志
curr_time=`date '+%Y-%m-%d %H:%M:%S'`
cd /data/Ln/TrunkDataTable
sed -i 's|'"${wait_second}"'|-1|' ./td_update_config.txt
echo $curr_time" update wait_second="$wait_second>>/data/Ln/TrunkDataTable/td_update.log
fi
1.4. 历次更新日志:td_update.log
1.5. 本次git更新日志:td_git.log
2.定时检查执行:用crontab里进行设置
2.1.编辑crontab: crontab -e
2.2.添加每分钟自动执行脚本:
*/1 * * * * /data/Ln/TrunkDataTable/td_update.sh &
六. 主要参考:
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。