我们都知道Linux和Android是开源的。Linux下的软件很多都不直接以二进制形式的安装包提供,而是直接提供了源代码,为了减少发行包的大小,用户须先下载源代码,在本机上编译并安装,使用make、make install命令。在提供源代码的软件中,很多是与内核紧密相关的驱动及其他底层程序。使用Git进行源代码管理,它在各方面都优于其他同类的源代码管理软件。想直接更快的融入Linux内核的方式就是直接阅读Linux内核的源代码,要想获得这些开源项目的源代码,必须使用Git。想参与Linux内核开发,就更需要了解Git,Linux内核完全是使用Git管理的。

有关Git的安装以及其文档的相关内容就不再赘述,主要学习Git的基本用法,如何管理源代码,即源代码的提交和获取的方法和步骤

1.创建版本库 git init:任何版本管理软件都必须有一个版本库,不同的是这些软件对版本库的管理方式。Git版本库管理软件的版本库的组织方式与其他管理软件有很大差异。Git的版本库分为本地版本库和远程版本库。不连接Internet时,Git管理源代码直接与本地版本库通信;连接Internet时,将本地版本库同步到远程版本库。访问本地版本库不需要任何权限,自己就是本地版本库的主人。任何人想修改Git源代码托管服务器中的源代码,必须使用git clone命令在本地建立一个与远程版本库一模一样的本地版本库。

先使用git init在本地创建一个空的版本库,执行命令

“# mkdir -p 开源项目的工作目录

# cd 开源项目的工作目录”

建立一个开源项目的工作目录,并进入工作目录。执行命令“# git init”,执行完后会输出信息“Initialized empty Git repository in 开源项目的工作目录/.git/”在开源工作目录中使用ls命令不会显示内容,执行命令“# ls -al”会显示.git隐藏目录。一个空的版本库成功建立了,在源代码工作目录中有一个隐藏的.git目录,即本地版本库。进入该目录,使用ls命令列出.git目录中的子目录和文件,目前还都是初始状态,在经过不断操作这个本地版本库后,相关子目录和文件的内容也会被修改。

2.将文件提交到本地版本库-git commit:Git管理文件不仅管理源代码,还管理任何文件。

先将文件提交到本地版本库.git目录,执行命令

“#cd 开源项目的工作目录

#echo "文件中输入的内容">文件名.txt”

进入开源项目的工作目录,并建立一个txt文件。在txt文件中有一行刚才命令中输入的内容,执行命令

“# git add txt文件

# git commit -m 提交的备注”

将txt文件加到本地版本库的索引中,并将txt文件提交到版本库。-m命令行参数为本次提交的备注,Git要求必须指定该信息。如果git commit未指定该信息,系统会调用默认的文本编辑器vi要求输入该信息。执行命令“# git log”可以显示日志信息。一旦将工作目录中的文件提交到本地版本库,就不怕源代码误册或误改了。

执行命令

“# echo 文本内容>txt文件

# cat txt文件”

可在txt文件后再添加一行文本。

执行命令“# git checkout txt文件”可以立刻恢复到最近一次提交的状态,删除txt文件也同样可以恢复。

3.创建本地分支-git branch:Git提供了分支,一个源代码可能由多人共同完成,开发人员会为每一处修改建立一个分支,这样在修改后提交不会影响主分支的代码。提交后经测试人员审核,会将该分支合并到主分支。使用命令“# git branch”可以了解当前版本库包含哪些本地分支,使用命令“# git branch new-branch”可以建立一个新的分支。分支前面的*表示当前工作目录在哪个分支下。使用git commit命令会将修改后的文件提交到工作目录当前所在的本地分支。使用命令“# git branch -D new-branch”可以删除刚建立的分支,但在执行命令时要小心,因为在分支中所做的一切修改都将消失。

4.切换本地分支-git checkout:本地分支是为了隔离主分支不同部分的修改。使用git checkout命令可在不同的本地分支之间切换。使用命令“# git checkout new-branch”将当前本地分支切换到new-branch上。使用命令

“# echo '文本内容'>txt文件

# git add txt文件

# git commit -m 文件名-new-branch”

可以修改txt文件的内容,保证与master分支的内容不同,并重新提交到本地版本库。使用git checkout master和git checkout new-branch来回切换本地版本库,txt文件中的内容会随着分支的变化而变化。

5.在GitHub上创建开源项目:使用Git管理源代码都会使用远程的Git托管服务器。GitHub是目前比较流行的Git托管服务提供商,使用它之前需要在网页上注册一个免费的用户。注册登录成功后,进入GitHub首页,单击右下角“New repository”创建一个新的项目,输入项目名即可。免费账号只能建立开源项目,并不能建立闭源项目。建立完项目后,页面会指引用户将源代码上传到GitHub。

6.上传源代码到GitHub-git push:GitHub上传代码时需要SSH校验,使用命令“# ash-keygen -t rsa -C "注册GitHub时输入的Email"”,在~/.ssh目录中生成一个密钥文件id_rsa和一个公钥文件id_rsa.pub,如果这两个文件已存在,需要备份。执行命令需要做一些选择或输入,如果~/.ssh目录中存在id_rsa和id_rsa.pub文件,会询问是否覆盖它们,还需输入注册账号时输入的密码。生成的~/.ssh/id_rsa和~/.ssh/id_rsa.pub都是纯文本格式,使用编辑器打开~/.ssh/id_rsa.pub,将该文件中的所有内容复制到剪贴板,不要修改文件的任何内容。进入GitHub账户设置页面,在账户设置页面左侧选择“SSH public Keys”,单击页面中间“Add another public key”链接,在添加public key的输入框内将刚才复制的内容粘贴进来。Title输入框可以随意输入,完成后单击“Add key”添加一个public key。设置完public key后,执行命令“# ssh -T git@github.com”检测公钥、密钥以及刚才的设置是否正确。不正确会输出信息“Permission denied(publickey)

fatal:The remote end hung up unexpectedly”。如果成功完成上面操作但也无法通过测试,则需执行命令“# ssh-add”向代理身份验证添加RSA身份。上传文件之前需使用git config设置上传者的名字和email,在客户端并不验证,Git托管服务器可能会验证,要使用自己的名字和email,命令

“# git config --global user.name 自己设的名字

# git config --global user.email 自己的email”,

接下来使用git remote add和git push命令上传工作目录中的文件。先使用git remote命令设置某个工程在GitHub上的URI,“# git remote add origin 远程代码库名,与工程对应的URI”,工程中没有任何文件是无法进入工程管理页面的。使用命令“# git push -u origin master”将本地版本库中的文件上传到GitHub。master是远程版本库origin中的主分支。执行命令“# git branch -a”查看所有的分支,本地分支和远程分支。成功后可在GitHub页面上看到刚上传的文件,也可在该页面找到用于上传的URI

7.从GitHub下载源代码-git clone:执行命令“# git clone 工程目录”可下载需要的整个工程。工程目录中包含一个.git本地版本库目录。想获取某一分支的最新内容,可以使用命令“# git pull origin master”

第三章 Git使用入门的更多相关文章

  1. 第三章 Git的入门 - 读书笔记

    Android驱动月考3 第三章 Git的入门 - 读书笔记 对于Github,这是全世界最大的开源平台,你可以把你做的项目在这里开源,把你发现的一些新技术在这里开源,向全世界的开发者们分享,大家都彼 ...

  2. 第三章Git使用入门--读书笔记

    “管理”一词,几乎在生活的方方面面都存在,而在Linux驱动开发中会涉及很多的源代码,对于数量繁多的源码,我们也应该有一个管理软件.Android和Linux内核及驱动开发的源代码基本都是由Git 来 ...

  3. Android深度探索HAL与驱动开发 第三章 Git入门

    Git功能十分复杂,简单来说它使你的开发更为快捷和可控,尤其是在开源项目上展现的友好的交互和回馈. 熟悉一些git指令操作对开发者的帮助可以避免开发者受到一些外在因素打断开发进度,甚至延误项目的che ...

  4. 学习笔记-[Maven实战]-第三章:Maven使用入门(3)

    这里说一下在建测试工程里遇到的问题 1.第一次建工程,junit依赖始终没有成功,最后删除现在工程,新建了一个工程就好了 2.使用junit4的问题.工程默认的依赖是junit3.8.1,我改成了4. ...

  5. 学习笔记-[Maven实战]-第三章:Maven使用入门(2)

    使用maven执行编译和测试 1.maven执行编译 (1).在pom.xml上点右键,选择Maven build... (2).在Goals里输入clean complie,执行编译 执行结果: [ ...

  6. 学习笔记-[Maven实战]-第三章:Maven使用入门(1)

    说明:[Maven实战]一书还介绍了怎么样手工创建Maven工程,学习这本书是为了能尽快在工作中使用,就忽略了手工建工程的部分 如果想了解这部分的内容,可以自己看看书 开始: 1.新建一个maven工 ...

  7. maven第三章 maven使用入门

    3.1编写pom groupId 一个项目名称 artifactId 子项目(模块)名称 version 开发中的版本,稳定的版本 name 项目名称,方便信息交流 http://news.cnblo ...

  8. [Maven实战-许晓斌]-[第三章] Mave使用入门二(在IDE中的使用) [第四章] 案例的背景介绍

    创建maven项目

  9. [Maven实战-许晓斌]-[第三章] Mave使用入门

    <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://mave ...

随机推荐

  1. ROS学习笔记(二)——ubantu 14.04 安装

    0.采用双系统安装(U盘安装) 1.安装文件在ubantu官网下载: ubantu官网 :https://www.ubuntu.com/ ubuntu的server版和desktop版有什么区? (来 ...

  2. Address already in use: JVM_Bind:8080 的解决办法<转>

    出错情况:运行 Tomcat 时报错 含义:8080 位置显示的端口被其他进程占用 解决方法: 方法1: 开始--运行--cmd 进入命令提示符 输入netstat -ano 即可看到所有连接的PID ...

  3. Numpy Study 2----* dot multiply区别

    使用numpy时,跟matlab不同: 1.* dot() multiply() 对于array来说,* 和 dot()运算不同 *是每个元素对应相乘 dot()是矩阵乘法 对于matrix来说,* ...

  4. Result Maps collection already contains value for

    Result Maps collection already contains value for select s.id,s.branch_name from t_wx_shop s left jo ...

  5. 关于favicon.ico,shortcut icon,icon

    引入一篇文章.关于favicon.ico二三事. http://www.cnblogs.com/LoveJenny/archive/2012/05/22/2512683.html 一直对favicon ...

  6. 关于android的@TargetApi和@SuppressLint("NewApi")

    看别人的代码好多地方用到了@TargetApi.以前一直不知道这个是什么意思.后面偶然看了下sdk.才有所明白. 其实这个东西就是在你使用了android Lint检查工具的时候,为了防止代码出现提示 ...

  7. 说说ASP.NET的表单验证

    FormsAuthentication是ASP.NET运行时提供的一种Web身份验证方案,以cookie为信息载体,同其它身份验证方案相比,此方案广泛应用于各类的Web应用中,其实现原理其实和具体的W ...

  8. 深入浅出Mybatis系列(五)---TypeHandler简介及配置(mybatis源码篇)

    上篇文章<深入浅出Mybatis系列(四)---配置详解之typeAliases别名(mybatis源码篇)>为大家介绍了mybatis中别名的使用,以及其源码.本篇将为大家介绍TypeH ...

  9. Windows Store App 全球化 资源匹配规则

    上面几个小节通过示例介绍了如何引用资源以及设置应用语言来显示不同语言的信息,这些示例都只是添加了简体中文和英语两种语言来显示资源,而在一些复杂的应用程序中,字符串资源可能会被定义成多种语言,文件资源也 ...

  10. 10.6 CCPC northeast

    1001 Minimum's Revenge 点的编号从 1 到 n ,u  v 的边权是 LCM(u,v) ,求这个图的最下生成树 搞成一颗以 1 为 根 的菊花树 ---------------- ...