一套简单的git版本控制代码

对于博客来说,我还是直接实践比较好,理论过多,不方便以后的查看

废话不多,直接开干

功能需求:

1.公司需要将jenkins打包出来的压缩包通过git上传到git服务器
  2.而且通过版本控制上传的文件,即分支名为版本名
   3.git pull上传到git服务器,并且触发post-receive钩子对git服务器文件进行拉取到对应目录解压

功能图表展示:

  1.创建git文件

2.版本控制

3.钩子处理

4.git服务器结构

目录结构

客户端
---git
--client.zip
--server.zip
---version.txt #存放需要git上传的目录名
git服务端
---git.git
--hooks
--post-receive
--authoup
--post_receive.py
--config.py
...

客户端代码:

config.py:

#项目上传git的配置信息

git_url = 'ssh://[email protected]'

git_dir = 'D:/git'

version_dir = 'D:/versions'

time_stamp = 'D:/version.txt'

 pushgit.py:

# -*- coding: utf-8 -*-
import os
import shutil
import sys, re
import traceback
import zipfile
# dir = os.path.dirname(os.path.abspath(__file__),'/../')
sys.path.append(os.path.dirname(os.path.abspath(__file__)) + "/../")
from jenkins_structure import settings


# 获取到源码目录名
def get_time_stamp_name():
    with open(settings.time_stamp, "r", encoding="utf-8") as f:
        time_stamp = f.read()
    return time_stamp


# 推送源码到git服务器
def push_git(version_name, version_comment):
    time_stamp = get_time_stamp_name()
    get_version_dir = settings.version_dir + "\\" + time_stamp

    try:
        #判断是否存在git目录,不存在从则git库克隆下来
        if os.path.exists(settings.git_dir) != True:
            items_dir = os.path.dirname(os.path.abspath(settings.git_dir))
            os.chdir(items_dir)
            os.system("git clone %s" % settings.git_url )
            os.system("git checkout -b master")
        # 切换到存放版本目录并切换master分支,防止其他分支对其造成错误
        os.chdir(settings.git_dir)
    except Exception as e:
        traceback.print_exc()
        os.system("git checkout master -f")
    # 创建git版本分支并切换工作分支到该分支
    os.system("git checkout -b %s" % version_name)
    # 拷贝源码到新的版本目录
    shutil.copyfile(get_version_dir + '\\' + "client.zip", settings.git_dir + "\\" + "client.zip")
    shutil.copyfile(get_version_dir + '\\' + "server.zip", settings.git_dir + "\\" + "server.zip")
    # # 提交并推送到远程仓库
    os.system("git add .")
    os.system("git commit -m '%s'" % version_comment)
    os.system("git push origin %s" % version_name)

猜你喜欢

转载自www.cnblogs.com/tang-s/p/9719690.html
今日推荐