【Git】拉取部分代码【原创】

本文介绍了如何在Git中仅拉取项目中的特定目录,适用于需要增量发布的场景。通过Python3实现了一个逻辑示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、参考


二、实现

目前在做一个发布系统,由于有一些项目不能全量发布,只能增量发布,所以需要从git拉取部分代码即可,以下是git的实现:

mkdir 仓库名
cd 仓库名
git init 
git remote add origin git地址

// 开启Sparse Checkout模式
git config core.sparsecheckout true 

// 设置需Check Out的文件
echo "文件路径" >> .git/info/sparse-checkout 

// Check Out
git pull origin 分支名(一般是master) 

三、代码示例

使用Python3实现了这个逻辑,可以参考一下:

import os
import signal
import subprocess
import platform
import json


def get_git_file():
    """
    拉取git的部分代码
    :return:
    """
    try:
        release_info = {
            'git_path': 'xxxx',
            'git_branch': 'sit', # 分支,一般是master
            'update_files': [
                'src/scbyao.exb',
                'src/cmpeod03.sjl',
                'src/aibd230.btb',
                'src/gdot5810.cpy',
                'src/ibbdpbal.btb',
                'src/sczics.olb',
                'src/bptbank.tbl',
                'src/vflhead.prm',
                'src/bspeo@r2.sjl',
                'src/cmbdinf.btb',
                'src/bptevet.tbl',
                'src/ddztdcwh.olb'
            ],
        }
        git_folder = '/data/git_folder/test'

        # 初始化
        cmd = 'cd %s && git init' % git_folder
        print('git初始化,执行的命令为: %s' % cmd)
        (code, msg) = run_cmd(cmd)
        print('git初始化,执行的结果为: %s' % msg)

        if code:
            raise Exception('git初始化失败,原因是:%s' % msg)

        # 添加仓库
        cmd = 'cd %s && git remote add origin %s' % (git_folder, release_info['git_path'])
        print('添加仓库,执行的命令为: %s' % cmd)
        (code, msg) = run_cmd(cmd)
        print('添加仓库,执行的结果为: %s' % msg)

        if code:
            raise Exception('添加仓库,原因是:%s' % msg)

        # 开启Sparse Checkout模式
        cmd = 'cd %s && git config core.sparsecheckout true' % git_folder
        print('开启Sparse Checkout模式,执行的命令为: %s' % cmd)
        (code, msg) = run_cmd(cmd)
        print('开启Sparse Checkout模式,执行的结果为: %s' % msg)

        if code:
            msg = '开启Sparse Checkout模式失败,原因是:%s' % msg
            raise Exception(msg)

        # 设置需Checkout的文件
        update_files = []
        for file in release_info['update_files']:
            cmd = 'cd %s && echo "%s" >> .git/info/sparse-checkout' % (git_folder, file)
            (code, msg) = run_cmd(cmd)

            if code:
                msg = '设置需Check Out的文件失败,原因是:%s' % msg
                raise Exception(msg)
            update_files.append(file)

        print('需要checkout的文件有:%s' % json.dumps(update_files))

        # 拉代码
        cmd = 'cd %s && git pull origin %s' % (git_folder, release_info['git_branch'])
        print('拉代码,执行的命令为: %s' % cmd)
        (code, msg) = run_cmd(cmd)
        print('拉代码,执行的结果为: %s' % msg)

        return 0, 'success'
    except Exception as e:
        return 1, str(e)


def run_cmd(cmd_string, timeout=600):
    """
    执行命令
    :param cmd_string:  string 字符串
    :param timeout:  int 超时设置
    :return:
    """
    p = subprocess.Popen(cmd_string, stderr=subprocess.STDOUT, stdout=subprocess.PIPE, shell=True, close_fds=True,
                         start_new_session=True)

    format = 'utf-8'
    if platform.system() == "Windows":
        format = 'gbk'

    try:
        (msg, errs) = p.communicate(timeout=timeout)
        ret_code = p.poll()
        if ret_code:
            code = 1
            msg = "[Error]Called Error : " + str(msg.decode(format))
        else:
            code = 0
            msg = str(msg.decode(format))
    except subprocess.TimeoutExpired:
        p.kill()
        p.terminate()
        os.killpg(p.pid, signal.SIGTERM)

        code = 1
        msg = "[ERROR]Timeout Error : Command '" + cmd_string + "' timed out after " + str(timeout) + " seconds"
    except Exception as e:
        code = 1
        msg = "[ERROR]Unknown Error : " + str(e)

    return code, msg
### 如何在 GitHub 上找到并下载原创代码 要在 GitHub 上查找并下载原创代码,可以按照以下方法操作: #### 查找原创代码 GitHub 是全球最大的开发者社区之一,其中包含了大量由个人或团队开发的开源项目。可以通过访问 GitHub 的主页 (https://github.com)[^1] 并利用其内置搜索功能来寻找特定类型的代码库。 当您输入关键词时,可以选择不同的过滤器,比如按语言、更新时间或者星标数量排序,以便更精准地定位到所需的原创代码资源。 #### 下载代码的方式 一旦找到了目标仓库,有几种方式可以从 GitHub 获这些代码: 1. **通过浏览器直接下载ZIP文件** 访问任何感兴趣的仓库页面之后,在右侧通常会有一个绿色按钮写着 “Code”,点击它会展开更多选项,其中包括“Download ZIP”。这是一种非常简单快捷的方法获整个项目的副本而无需安装额外软件[^2]。 2. **使用 Git 命令行工具克隆仓库** 如果已经配置好了本地环境支持 Git,则推荐采用这种方式因为便于后续同步最新的更改。具体做法是在终端运行如下命令: ```bash git clone https://github.com/{用户名}/{仓库名}.git ``` 这里的 `{用户名}` 和 `{仓库名}` 需要替换为目标实际存在的值。 3. **设置自动化脚本定期最新版本(适用于Linux服务器场景)** 对于那些频繁更新且部署至生产环境中的应用来说,手动执行 `git pull` 可能显得效率低下。因此可以在 Linux 系统上编写 shell 脚本来实现定时任务调度,从而自动完成这一过程[^3]。 4. **借助图形界面客户端程序** 此外还有许多第三方应用程序提供了友好的 GUI 来简化管理远程存储库的过程,像 SourceTree 或者 Fork 就是非常不错的选择[^4]。 5. **贡献自己的改动并通过 Pull Request 提交给原作者审核** 当发现某些地方能够改进或是修复 bug 后,也可以基于 fork 出来的分支做出相应调整再发起 PR 请求让维护人员审查接纳您的工作成果[^5]。 以上就是关于如何从 GitHub 寻觅以及得所需原始码的一些指导方针。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值