虚拟项目学习git/github原理与基本操作8

GitHub高效学习Python:从开源项目到实战技能提升 开源项目是现代编程学习的重要资源,通过阅读真实代码理解编程原理是提升开发能力的有效途径。GitHub作为全球最大的代码托管平台,汇聚了海量Python项目资源,为学习者提供了从基础语法到高级应用的完整学习路径。在软件工程实践中,通过参与开源项目可以学习企业级开发规范,掌握版本控制、代码审查等核心技能。对于Python开发者而言,GitHub不仅是代码仓库,更是技术社区和实战训练场。本文基于Python学习和开源协作的热点需求,详细介绍如何利用GitHub上的优质资源,包括cpython源码、requests 阅读详情

假设目前我们的项目状态是这样的,如下图所示,分支的情况,当前已经把其他的分支都合并到了master分支。


接下来的操作都以上面图中最新的master分支为基础进行,前面的都不去讨论。

现在我们将master分支向前推进两步,分别添加写别的功能,在function2中。

如果不推送到远端的话,远端仓库的HEAD指针会比当前工程的指针落后一步。

所以把工程推送到远端。


然后再看当前的分支图




这个时候为了让分支图看得更加清晰,我们再次让当前项目推进一步,修改一点东西。

比如说我们这次添加新的特征feature x11

这个时候的分支图看起来是这样的:



可以看到远端仓库的master分支落后了,我们再次推送到远端仓库一下。

然后分支图看起来就是这样的了:



我们从现在的基础上,拉出一个新的分支称为:featurex1,在这个新的分支上为整个项目添加新的特征,并在这个分支上进行相关测试,所以不论这个分支是否成功,都不会对原来的master分支的程序造成恶化,就算失败了,直接不要这个分支就可以了,如果这个分支测试成功,那么把这个特征分支合并到master分支就很方便了。


watkins@watkins:~/watkins/finance$ git branch featurex1
watkins@watkins:~/watkins/finance$ git branch -v
  featurex1 fd91f3b add feature x11
  iss53     5fda582 iss53-2
* master    fd91f3b add feature x11
watkins@watkins:~/watkins/finance$ git checkout featurex1 
Switched to branch 'featurex1'
watkins@watkins:~/watkins/finance$ 

然后把切换到新的分支中,推进两步,分别修改不同的地方,假设分别修改issuex1_1,issuex1_2

目前推进之前的分支图如图所示:



然后将分支向前推进两步。

然后,我们发现我们现在的featurex1分支已经开发的非常好了,而且经过完善的测试,所以现在我们想把在feature1中添加的功能合并到master分支中。

就可以切换到master分支中,然后合并feature1分支。

watkins@watkins:~/watkins/finance$ git merge featurex1 
Updating fd91f3b..07c0bb7
Fast-forward
 funciton3 |    2 ++
 1 file changed, 2 insertions(+)
watkins@watkins:~/watkins/finance$ 


出现了Fast-forward,是因为合并之前master分支的快照指针是featurex1的快照指针的父节点,所以可以直接将master指针向后移动,不许要处理其他的冲突操作等,因为不存在。

当前分支图为:



合并时出现了 “Fast forward”(快进)提示。由于当前 master 分支所在的 commit 是要并入的 hotfix 分支的直接上游,Git 只需把指针直接右移。换句话说,如果顺着一个分支走下去可以到达另一个分支,那么 Git 在合并两者时,只会简单地把指针前移,因为没有什么分歧需要解决,所以这个过程叫做快进(Fast forward)。

深入理解Git与GitHub:原理与实战指南 在软件开发的历史长河中,版本控制系统经历了从集中式向分布式的发展。最初,开发者们依赖于简单的文件备份和手动合并来跟踪代码变更。这种方法很快暴露出诸多问题,例如版本冲突、历史记录丢失、多人协作困难等。集中式版本控制系统(CVCS),如CVS和Subversion,试图解决这些问题,将所有代码维护在单一的服务器上。尽管这种集中式的做法提高了团队协作的效率,但其缺点也显而易见。任何对服务器的依赖都可能成为单点故障,一旦服务器发生故障,整个开发进程将被迫停滞。 阅读详情

相关推荐

Git和Github原理和操作

Git原理,github操作,命令行操作git,git的eclipse操作,虚拟机gitlab搭建

git及github的原理及使用(一)

目录 1、版本控制工具应具备的特点 2、版本控制工具分类 3、Git结构 4、代码托管中心 5、本地库和远程库的联系 6、安装Git 7、基本命令操作 8、版本管理 9、分支 10、Git原理 1、版本控制工具应具备的特点 协同修改:多人并行不悖的修改服务器端的同一个文件。 数据备份:不仅保存目录和文件的当前状态,还能够保存每一个提交过的历史状态。 版本管理:在保存每一...

qinshi965273101的专栏 3264

Silvaco TCAD 2018安装后,如何配置TonyPlot 5.0.22.R并解决绘图报错?

本文详细介绍了在Windows系统上安装Silvaco TCAD 2018后,如何正确配置TonyPlot 5.0.22.R并解决常见的绘图报错问题。内容包括版本兼容性分析、环境变量设置、常见错误解决方案以及性能优化建议,帮助用户顺利完成仿真结果的可视化工作。

weixin_31031711的博客 423

github原理剖析

一:目录结构 二:暂存区 三:git对象 Git 是一个内容寻址文件系统。这意味着,Git 的核心部分是一个简单的键值对数据库(key-value data store)。 你可以向该数据库插入任意类型的内容,它会返回一个键值,通过该键值可以在任意时刻再次检索(retrieve)该内容。 下面我们往git数据库存入一些数据 $ echo 'test content' | git hash-ob...

不会写代码的胖子 1087

VS2022跨平台开发实战:SSH远程调试Linux程序全攻略

本文详细介绍了如何使用Visual Studio 2022进行跨平台开发,通过SSH协议远程调试部署在Linux服务器上的C/C++程序。文章提供了从环境搭建、连接配置、项目创建到编译调试的完整实战指南,帮助Windows开发者无缝衔接Linux环境,显著提升问题定位与开发效率。

weixin_28826521的博客 431

滞回比较器电路详细分析

滞回比较器是一种用于检测两个不同电压值并使比较器输出高电平或低电平的电路。滞回比较器的特点是具有迟滞特性,即当输入电压高于某一阈值时,比较器输出高电平,当输入电压低于另一阈值时,比较器输出低电平,而在这两个阈值之间,比较器的输出保持不变。比较器通常有两个模拟电压输入端UIN+和UIN-以及一个数字状态输出端UOUT。当UIN+大于UIN-时,UOUT为高电平;当UIN+小于UIN-时,UOUT为低电平。根据具体的系统定义,这两种电位的具体数值可以有所不同。

LuDvei的博客 2万+

GitHub的原理及应用详解(一)

在本系列文章中,我们将深入探讨GitHub的原理和应用,从基础的使用教程到高级的功能和工具的应用,帮助大家更好地理解和使用GitHub来管理和协作开发项目。无论是初学者还是有一定经验的开发者,都可以从本系列文章中获取到有价值的知识和实践经验。希望本系列文章能够帮助大家提高开发效率和团队合作能力,并在开发过程中取得更好的成果。

凛鼕将至的博客 3212

从0开始,部署micro_ros+stm32f407+stm32cubeIDE

(5)安装依赖项rosdep时,必须处于创建的microros_ws中,因为里面有clone的src文件夹。(3)教程a中的安装docker不是必须的,取决于运行agent时是否想使用docker。(4)记得安装rosdep,并在以后的命令中将rosdep替换为rosdepc。4、运行agent,选择udp、tcp、can、串口,这里没有使用docker。(1)首先参考教程a安装虚拟机和ubuntu,注意版本选择22.04;(2)参考教程b部署micro_ros构建系统。二、安装和运行agent。

m0_37963053的博客 2234

GitHub到底是干什么的?使用场景是什么?底层原理是什么?

GitHub是全球最大的代码托管与协作平台,其核心价值在于将深度融合,为开发者提供从代码管理到项目全生命周期的一站式解决方案。

长风破浪会有时的博客 1万+

AutoModelForCausalLM 加载失败:flash_attn 缺失的三种解决方案

本文针对使用AutoModelForCausalLM加载大语言模型时因缺失flash_attn依赖而报错的问题,提供了三种实用解决方案。最推荐通过修改模型配置文件或代码动态指定注意力实现为“eager”模式来绕过检查,也介绍了临时修改库源码的应急方法,并解释了flash_attn的作用及正确安装指南。

html8的博客 269

通义千问AI模型对接飞书机器人-集成飞书机器人(2-2)

http请求地址上一篇百炼平台配置的应用地址。

hefaji的博客 1916

git图解:代码区域总结

本文背景,在实际项目中使用git已有一年多,发现不少同事虽然会使用常用git指令,但并不理解每个指令对应的作用原理。今天静下心总结下git 的基本理解:代码的存在区域;本文以实际项目出发,理清使用git过程中,代码的迁徙流程。 git跟传统的代码管理器(如:svn)不同, 主要区别在于git多了个本地仓库以及缓存区,所以即使无法联网也一样能提交代码。术语解释: 工作区间:即我们...

anku1776的博客 2254

如何使用freesurfer对T1w结构像进行分区指标的提取?——皮层面积,灰质体积,平均厚度,厚度标准差,平均曲率、高斯曲率、曲率指数、折叠指数

如何使用freesurfer对T1w结构像进行分区指标的提取?——皮层面积,灰质体积,平均厚度,厚度标准差,平均曲率、高斯曲率、曲率指数、折叠指数

从事脑科学核磁共振方法学研究,在Nature communications等权威期刊发表研究论文,熟练掌握磁共振处理方法和统计学方法,欢迎大家和我交流。 3788

虚拟项目学习git/github原理与基本操作2

假设我们的虚拟项目是某财务系统,计算某个公司的纳税额等信息。 先在github中创建一个这个项目的repo, 命名为finance. 创建好这个repo以后,github给出了一些基本的命令如下: Create a new repository on the command line touch README.md git init git add README.md git commit

Work Hard, Play Harder! 2220

【数据集】ERA5(欧洲中期天气预报中心)再分析数据介绍及下载

简介EAR5数据集及下载步骤

WW、forever的博客 1万+

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

虚拟项目学习git/github原理与基本操作7

项目的分支管理 Git 中的分支,其实本质上仅仅是个指向 commit 对象的可变指针。Git 会使用 master 作为分支的默认名字。在若干次提交后,你其实已经有了一个指向最后一次提交对象的 master 分支,它在每次提交的时候都会自动向前移动。 如果你没有指定当前的分支的名字,git会自动的使用master作为当前的分支的名字,并且有个指针指向当前的工作的分支,每次提交项目

Work Hard, Play Harder! 1533

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

虚拟项目学习git/github原理与基本操作1

本人为了更好的学习git的基本操作,利用github给提供的良好的服务,通过一个虚拟项目来熟练git的基本操作与原理。 1. Git基础知识 在git中每一次版本信息都是对所有文件的一次快照,保存了指向这个快照的索引。 对于任何一个文件,git内部只有三种状态,已提交(committed),已修改(modified)和已暂存(staged). 已提交表示该文件已经被

Work Hard, Play Harder! 2157

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

虚拟项目学习git/github原理与基本操作5

首先查看一下我们当前项目的提交历史,可以使用git log $ git log watkins@watkins:~/watkins/finance$ git log commit f2f51bd6eefdd115ec4be37540f97dfb81828ad1 Author: weixingstudio Date: Thu Jan 3 13:32:15 2013 +0800

Work Hard, Play Harder! 1944

虚拟项目学习git/github原理与基本操作3

获得远端仓仓库的代码,使用git clone  $ git clone git://github.com/schacon/grit.git 你可能已经注意到这里使用的是 clone 而不是 checkout。这是个非常重要的差别,Git 收取的是项目历史的所有数据(每一个文件的每一个版本),服务器上有的数据克隆之后本地也都有了。实际上,即便服务器的磁盘发生故障,用任何一个克

Work Hard, Play Harder! 1265

虚拟项目学习git/github原理与基本操作6

在系统发布新版本或者有里程碑式的重大版本变化的时候,我们往往习惯给软件加个tag. 用来做标注与说明,同时tag的使用也比冗长的版本号要方便得多。 $ git tag 使用上面的命令可以查看当前系统的所有的tag. watkins@watkins:~/watkins/finance$ git tag v0.1 watkins@watkins:~/watkins/fin

Work Hard, Play Harder! 1460

虚拟项目学习git/github原理与基本操作4

新建一个新的文件,作为项目的第一个正式文件,因为当前我们的项目中已经包含一个README文件,这个时候做了一次项目的提交,所以我们现在项目的一个版本记录了当前版本的所有文件的镜像,我们称为C1。 查看当前项目状态: git status 会给出当前项目中的文件的状态,是未跟踪,还是已经修改没暂存,或者已经暂存,或者已经提交等状态。 watkins@watkins:~/w

Work Hard, Play Harder! 1546

虚拟项目学习git/github原理与基本操作10

衍合 把一个分支整合到另一个分支的办法有两种:merge(合并) 和 rebase(衍合)。在本章我们会学习什么是衍合,如何使用衍合,为什么衍合操作如此富有魅力,以及我们应该在什么情况下使用衍合。 简单的说衍合就是把当前的分支的变化在另外的一个分支上重演一次。 在我们以前的项目的基础上,把 master分支向前推进两步。 因为我在自己练习的时候已经将featur

Work Hard, Play Harder! 1319

GitHub实战:Python学习者的代码阅读与项目拆解指南

在编程学习过程中,理解代码结构与工程实践是提升开发能力的关键环节。通过阅读和分析真实项目代码,开发者可以深入掌握模块化设计、异常处理机制以及测试驱动开发等核心原理。这种基于实战的学习方法,能够帮助学习者跨越从理论到实践的鸿沟,快速积累解决实际问题的经验。特别是在Python生态中,结合GitHub这一平台,学习者可以接触到大量使用流行框架如Django、Flask以及数据处理库如Pandas的优质项目。通过系统性地拆解项目,例如从环境配置、依赖管理到核心逻辑分析,学习者不仅能巩固语法知识,更能领悟工程化思维

virusswb的专栏 300

虚拟项目学习git/github原理与基本操作9

继续在原来的项目的基础上继续推进,我们在原来合并了master和featurex1的基础上,继续推进两步master分支。 然后我们推进featurex1分支两步。 这个时候featurex1分支的分支图如图所示: 然后,我们想把featurex1的内容合并到master分支中,假设已经测试通过了所有的featurex1分支中的内容。 watkins@watkins

Work Hard, Play Harder! 1461

GitHub驱动Python学习:从开源项目到实战能力的进阶路径

在编程学习过程中,项目驱动学习是连接理论知识与工程实践的关键桥梁。其核心原理在于通过真实、可运行的代码库,让学习者直接接触完整的项目结构、依赖管理和调试流程,从而培养解决实际问题的能力。这种学习方式的技术价值在于,它不仅教授语法,更传递了代码组织、版本控制和协作开发等现代软件工程的最佳实践。在Python生态中,GitHub作为全球最大的开源代码托管平台,汇聚了从基础工具到企业级应用的海量项目,为学习者提供了零成本的实践环境。通过搜索高质量项目、运行代码、阅读和修改源码,学习者可以快速掌握特定领域的技术栈,

weixin_30843605的博客 453

如何利用github构建项目

快速跑通github开源项目

panzhengxiang的博客 222
上一篇: 虚拟项目学习git/github原理与基本操作7
下一篇: 虚拟项目学习git/github原理与基本操作9
watkins
博客等级 码龄18年 1277粉丝 246原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值