现在我大二,距离我敲下第一行HelloWorld,已经四年有余,快五年了(初三就买了本《C Primer Plus》,钱还是跟我哥借的,但挡不住我现在依旧是个菜鸡)。当时我写的代码放txt里面,是这样的:
我打算将它们保存下来,但是我发现根本就不靠谱,我记得很清楚,那个时候我还没有电脑,编程一直是在我二姑家里用电脑学习的,为什么说它不靠谱呢,电脑不是我一个人用,所以我无法掌控,随便一个重装系统,我的产物就灰飞烟灭了。但是很快我找到了新的存储,就是下面qq空间日志里面。
再后来,我上高一,家里为了我学习编程为我买了一台笔记本,那个时候花了5000多,那么一厚踏钱就全给人家了,也不知道自己的决定对不对。于是我又将保存代码的阵地从qq空间搬到了本地,就这样陆陆续续持续了三年,而我的CSDN账号也是在19年10月注册的,也就是大学刚开学,经常使用百度解决编程问题,那么csdn肯定是点击率最高的几个网站之一,但就是这样,使用了两年多csdn的我,竟然连个账户都没注册!!!这不可思议,但好在咱进度不错,注册之后就一发不可收拾,疯狂水文,这一次我又将代码搬到了csdn上面,我将代码作为文章保存发布,将代码打包成资源发布,申请不到一年,于今年9月申请了博客专家并成功通过。然后就是我们文章的主角Github,我第一次真正注册并使用是在今年的1月15日,在这之前,我只是有了解过Github,大概知道是用来保存代码的,但当时我并不能感觉到它的强大,虽然所以人都说它强大。
记得当时查资料,花了好一段时间,才将GitHub配置好,当我将本地代码送至远程仓库的那一刻时,我忍不住发了一个朋友圈:Github真香!你可能觉得我前面说了一堆废话,但我觉得它是我成长的一个记录,一个过程,就好像我简介里面的那句话: 可执行文件不是你的财富,修改过程中的经验才是。 当你从头走过来,才能发现其中的美好,现阶段当你认为一些东西不重要时,我觉得那就是不重要的,当然学习除外啊(手动狗头)。
Github是一个git的服务器提供商 帮我们共享代码(托管代码) 也是一个开源平台,可以用来下载很多知名开源项目的源代码,在我们修改项目的时候,我们可以创建一个分支,在修改完成后将他合并到主分支,进行版本管理。
类似的版本(代码)托管服务平台: 码云(gitee.com):是开源中国社区团队推出的基于Git的快速的、免费的、稳定的在线代码托管平台,不限制私有库和公有库数量.
Coding(coding.net): 是CODING 旗下的一站式开发平台,提供 git/svn 代码托管,免费支持私有库(限定)和公有库
还有我们不得不提的CSDN新推出的codechina(手动狗头)
上面是一个比较书面的介绍,看看就好了,我用通俗易懂的话告诉你,它可以干什么:
一.注册一个GitHub账户
这个就是Github的首页,在体验之前,还请各位看官下载谷歌浏览器,我之前就是因为使用其他浏览器被坑惨了!
我们先来创建一个账户,点击Sign up,进行账户注册。
下面的 Email perferences 选项默认勾选,意思是让github偶尔可以通过邮箱给你发送一些更新等等。
注册成功后,会进入GitHub的欢迎页面,这时别着急,请留意你的邮箱,github会给你发送一条邮件以此来验证你的电子邮件,并让你使用刚才设置的密码登录。
欢迎页,你可以设置一些属性,例如你是学生还是老师,你有没有编程经验等等,用github干什么,基本上可以忽略,我们继续往下看。
二.创建一个仓库和删除仓库
1.创建仓库
2.删除仓库
点击Settings,然后拉到最下面。
输入仓库名确认,即可删除仓库。
三.git配置和连接
如何让自己电脑上的代码同步到Github上所创建的仓库中呢?需要下载git,点我下载,选择对应的系统,对应的版本即可。
上面是官方的下载地址,下载还是不尽人意的,每秒11kb…给大家找了国内的(点击下载) 然后一路next,等待安装完毕,不出意外鼠标右键会显示 Git GUI Here 和 Git Bash Here GUI是对应的图形版本,Bash是对应的命令行版本。如果是不喜欢命令行的小伙伴可以使用GUI,如果喜欢简洁,神秘感可以使用Bash,狗子我还是推荐命令行的,毕竟可以学到很多东西。
下面也会用Bash 帮助大家学习,如果感觉到bash黑框框字小,可以按住ctrl 鼠标滚轮缩放哦。
1.设置用户名和邮箱
git config --global user.name "xxxxxxx"
xxxxx代表你的用户名
git config --global user.email "xxxxxxxx"
xxxxx代表你的邮箱
2.生成密钥(SSH Key)
ssh-keygen -t rsa -C "xxxxxxx"
xxxxx代表你的邮箱
出现上图,就说创建成功啦,再去用户主目录里找到.ssh文件夹,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露,id_rsa.pub是公钥,可以公开。
接下来到GitHub右上角,打开“Account settings”–“SSH Keys”页面,然后点击“Add SSH Key”,填上Title(随意写),在Key文本框里粘贴 id_rsa.pub文件里的全部内容。
3.验证是否成功
$ ssh -T git@github.com
如果是初次设置,会出现一个yes/no的选项,直接选择yes即可。
如果出现hi xxxx 表明你已经成功。
4.将本地的仓库关联到github上
使用Bash ,选择一个你代码所要存储的位置,找到你刚创建的仓库并点击code,复制下面的SSH,并输入以下命令:
git clone git@github.com:FdogMain/fdogtest.git
之后,你所指定的路径下会生成一个和仓库同名的文件夹,里面包含了一个.git文件夹和刚才我们创建的README.md文件。
至此,git和GitHub连接成功。
四.命令操作
1.将master改为main
我们写点简单的代码,并放在fdogtest文件夹下,并在bash演示如何上传我们的代码,在这之前有一些更改,有兴趣的话可以了解一下。
从2020年10月1日开始,Github将所有“master分支”一律改名为“main分支”。且最初在 Git 中写下“master”一词的开发者 Petr Baudis 也于 6 月份在社交网站上表明立场称,自己当年不该使用“master”这个可能给别人造成伤害的词语。并表示,他曾多次希望可以将“master”改成“main”(和“upstream”)。不过直到现在,才由 GitHub 开始主导替换工作。 如果是全新建立的话,默认的说明里就已经改为了main,就不用担心了。在此之前建立的还是显示master。 如下图:
那么如何将GitHub项目的默认分支从master迁移到main?
使用以下命令将master分支移到main:
git branch -m master main
使用以下命令将新命名的main分支推送到GitHub(假设这是您的远程存储库):
git push origin main
使用以下命令将HEAD指向main:
git symbolic-ref refs / remotes / origin / HEAD refs / remotes / origin / main
现在,您需要将“main”设置为GitHub上您项目的默认分支。为此,登录进入到您的GitHub帐户,打开项目的存储库,点击“设置” |>“分支”。在左侧边栏中,点击“分支”,然后从下拉列表中选择“Main”作为默认值。点击“更新”,出现提示后,点击“我了解”。现在,>回到终端,执行以下命令:
git push origin --delete master
这应该就可以了。
2.上传代码
Git本地有四个工作区域,分别是工作区,暂存区,版本区(也叫仓库区),远程仓库。
git status
该命令用于查看在你上次提交之后是否有对文件进行再次修改。 你所写的代码都在工作区,也就是文件夹下。
git add -A
提交所有变化git add -u
提交被修改(modified)和被删除(deleted)文件,不包括新文件(new)git add .
提交新文件(new)和被修改(modified)文件,不包括被删除(deleted)文件 执行上述命令后,代码进入暂存区。
git commit -m ‘注释’
将暂存区内容添加到本地仓库(版本区)
git push origin mian
将本地版本库推送到远程服务器
代码提交流程:
- git status 查看工作区代码相对于暂存区的差别
- git add . 将当前目录下修改的所有代码从工作区添加到暂存区 . 代表当前目录
- git commit -m ‘注释’ 将缓存区内容添加到本地仓库
- git pull origin main先将远程仓库main中的信息同步到本地仓库main中
- git push origin mian 将本地版本库推送到远程服务器,
- origin是远程主机,main表示是远程服务器上的main分支和本地分支重名的简写,分支名是可以修改的。
3.下载别人的代码
第一种就是在GitHub官网下载。
第二种是利用SHH,在你的Bash里面输入:
git clone git@github.com:FdogMain/FdogMusicPlayer.git
即可下载。友情提示:http比ssh慢一点~~~
4.如何查看历史版本
比如我现在对代码分别进行了两次更新,我要发送至远程仓库,commit 分别是第二次提交和第三次提交,那么我如何查看我的历史版本呢?
git log
查看历史版本
git log -x
查看最新的x个版本信息
git log -x filename
查看某个文件filename最新的x个版本信息(需要进入该文件所在目录)
git log --pretty=oneline
查看历史所有版本信息,只包含版本号和记录描述
5.如何滚回历史版本
git reset --hard HEAD^
回滚到上个版本
git reset --hard HEAD^~2
回滚到前两个版本
git reset --hard xxx(版本号或版本号前几位)
回滚到指定版本号,如果是版本号前几位,git会自动寻找匹配的版本号
git reset --hard xxx(版本号或版本号前几位) filename
回滚某个文件到指定版本号(需要进入该文件所在目录)
再次使用git log命令查看时,第三次提交已经没有了。
6.回退到历史版本如何再滚回去
git log -g
查看之前操作的commit信息
找到你需要滚回的版本之后,按q退出,然后使用下面的命令滚回到你想滚回的版本。
git reset --hard 46f3ecbdfd18153d3b575c768f84c5d8d16c764c
后面的一串是commitID。
7.如何查看自己的代码量
1.统计个人新增/删除代码量
代码语言:javascript复制git log --author="_Your_Name_Here_" --pretty=tformat: --numstat | awk '{ add = $1; subs = $2; loc = $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %sn", add, subs, loc }' -
2.统计所有人新增/删除代码量
代码语言:javascript复制git log --format='%aN' | sort -u | while read name; do echo -en "$namet"; git log --author="$name" --pretty=tformat: --numstat | awk '{ add = $1; subs = $2; loc = $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %sn", add, subs, loc }' -; done
3.某时间段代码统计
代码语言:javascript复制git log --format='%aN' | sort -u | while read name; do echo -en "$namet"; git log --author="$name" --pretty=tformat: --since ==2019-2-12 --until=2019-2-15 --numstat | awk '{ add = $1; subs = $2; loc = $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %sn", add, subs, loc }' -; done
4.统计整个项目代码量
代码语言:javascript复制git log --pretty=tformat: --numstat | awk '{ add = $1; subs = $2; loc = $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %sn", add, subs, loc }' -
五.分支详解
分支的作用对于团队的作用太大了,当多人进行一个项目的开发,开发过程中,不可避免的要进行多人协作,当A,B两人被安排了不同的任务,在不同的分支上进行开发,互相之间不会影响,当A,B两人的任务完成后,测试无误,再合并到主分支中。一般情况下,开发都不会直接在主分支mian(以前是matser)上进行,都会创建一个新的分支,主分支的代码通常都是稳定的,可以直接发布或者被fork。
1.使用新分支
查看当前分支
git branch
创建新分支
git branch XX
切换分支
git checkout XX
然后我们在新的分支下更新一下我们的代码,将我们的G1分支代码上传至远程仓库。
中间出了一个小插曲,使用git push 命令,提示: fatal: The current branch G1 has no upstream branch. To push the current branch and set the remote as upstream, use git push --set-upstream origin G1 翻译过来是: 致命:当前分支G1没有上游分支。 若要推送当前分支并将远程设置为上游,请使用 git branch --set-upstream origin G1 出现上述问题,说明远程并没有感知到本地新建的这个分支,如果提示执行 git branch --set-upstream origin G1 命令后本地与远程的关联要是仍旧没有建立成功,则再次执行 git push -u origin G1 即可成功建立本地与远程的关联。
接着我们打开Github,点击分支。
我们可以看到刚才我们创建的分支G1,并且我们更新的代码也只在G1,主分支mian是存在的。
刚好想到,上面使用过的git log 命令,它可以用来查看当前分支的提交,但是有一个弊端,它只能查看与当前分支有关的提交,如果你现在处于G1,那么你只能查看到在G1分支下的提交,如何查看全部分支下的提交呢?使用git log --graph --all即可。
2.合并新分支
点击New pull request(新的拉取请求)
在新的页面提交,显示从G1合并到main,绿色对勾代表可以合并,没有冲突,并且下面会显示分支中添加的内容。
在我们的拉取请求中可以看到刚才我们的请求。
点击 分支中添加代码
翻译过来
我们可以查看该分支内容并确定是否同意合并该分支。一种就是直接点击按钮,另一种就是使用命令行。 这是我自己合并自己的代码,如果你想要在别人的项目中提交分支,需要先fork别人的项目,然后会创建一个同名的项目,相当于分支,在这个分支你可以任意修改,然后按上面的方法进行。 大家可以点击点击这里,来体验以上过程,这是我建的一个仓库,也可以直接在搜索栏搜fdogtest进行体验。