开发工具-Github


大名鼎鼎的 GitHub是一个面向开源及私有软件项目的托管平台,因为只支持 Git 作为唯一的版本库格式进行托管,故名 GitHub。此平台上有大量的开源程序代码,方便使用和学习。对于开发者,也可以使用此平台进行版本控制、多人协作、团队开发等。

GitHub官方网站

github 网站对中国大陆用户来说不太稳定,之前一直想学习使用,但是总无法登录,网上教学更改 host 的方法也没几个靠谱。最近发现能够直接登录了,赶紧学习使用。但是因为其稳定性的原因,代码最好本地有备份。

另外 github 是全英文的,所以最好有一定的英文功底,感觉翻译的不太靠谱……。如果真是英文很烂,可以尝试去 gitee,这个是国内搭建的类似 github 的平台,里面很多项目是 github 上的,或者使用其他大神开发搭建的 github 爬虫站,例如 GitHub中文社区

注册并登录

进入官网页面,可以直接输入 E-mail 然后 Sign up for GitHub,根据提示输入相关信息。然后可以登录了,登录后需要接收邮件进行激活,成功激活后进入主页面。

基础使用

简单的基础使用,可以搜索、查看其他程序员分享的项目、程序、源码等。简单的查看 GitHub 上的项目,甚至无需注册账号,只要键入地址即可访问。

搜索项目

可以在左上角 Search or jump to… 搜索并跳转到感兴趣的项目。在网上应该有很多有趣的或使用的程序,提供 github 的源代码,根据它们提供的 id 或项目名称,在此搜索就能进入项目查看信息或下载源码了。

当然也可以搜索一些关键字,看看其他程序员们都留下了哪些痕迹。例如检索关键字:python技巧 等。

Trending 是官方的趋势列表,可以查看最近 star 上升最快的项目。这个页面可以根据说话语言筛选中文项目,也可以根据编程语言筛选相关项目。

查看

如果判断一个项目好不好,简单的可以关注三点:Star、README、Issues。

Star

一个项目的星星越多,上涨越快,说明此项目在社区中认同度越高,类似于被点赞。

README

可以在 code 一栏中查看,主要是对于该项目的介绍。readme 是 markdown 格式的文本

issues

Issues 在某种程度上来说,像是一种团队协作、头脑风暴的呈现形式。对于下一步需要完善的工序、项目的优化进程都可以在 issue 中找到动态——诸如 feature 的添加、bug 的修复等等。

仓库

仓库,顾名思义,就是用来存放我们想放在GitHub上的项目的地方,可以是代码项目,或者是任何其他内容。

创建完账号后,点击进入自己的主页 。这个「repositories」(中文:存放处)指的就是我们俗称的仓库。

通常新建立的账户会有默认的一个仓库 MyGit

新建仓库

可以在个人主页上新建仓库,也可以在仓库页新建。

新建仓库有几个需要注意的地方:

  • Repository Name : 仓库名称,通常跟在账户名后面,标识了仓库的地址。
  • Public / Private : 仓库性质,如果选择了 Pubilc(公开),那么会在 Github 公开,其他人都可以看到。

然后就可以创建仓库了。

设置仓库

新建的仓库可以直接使用,但是也可以进一步设置相关信息。进入仓库,点击 Settings,进行设置。

  • General : 常规设置
  • Collaborators : 合作者,管理共同开发项目团队

Fork

Fork 是复刻,在看到别的大神的仓库很棒,则可以使用 Fork 功能复制一个副本到自己的仓库,然后进行修改使用。

使用 git 同步代码

使用仓库同步代码需要使用 git 工具

git官方网站
git官方中文文档

下载和安装

linux

linux 可以使用包管理工具,也可以使用源码进行安装。

git官方源码下载页面
git官方各版本软件库

使用源码安装,先下载需要的源码包

wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.9.5.tar.xz

下载完成后得到的是 xz 压缩包,需要解压

xz -d git-2.9.5.tar.xz

解压完成后,是 tar 归档文件,需要解归档

tar -xvf git-2.9.5.tar

解归档之后是同名的文件夹,进入文件夹可以使用 configure 修改安装参数,并使用 Makefile 构建和安装。安装过程中可能会报错,需要装一些依赖包,可以使用包管理工具进行安装。需要注意的是,补依赖库时可能会连带安装低版本的 git (由包管理器安装),需要在依赖库安装完成后删除。

./configure --prefix=/usr/local/

make && make install

windows

git 官方windows版本下载地址

windows 版本下载完成后,执行安装程序一路 next 就可以了。

如果需要更新 git 程序,可以使用

git update-git-for-windows

创建本地 git 仓库

当安装好 git 软件后,可以在本地将某一个文件夹(项目文件夹)变为 git 的仓库,之后代码放在此文件夹中。

在命令行模式进入需要创建 git 仓库的文件夹,并初始化 git

git init

完成后,就将此文件夹创建成了本地 git 仓库。

管理 git 暂存

在仓库里可以存放各种各样的文件,需要使用 git 进行控制的文件需要先添加至 git 暂存

git add filename
# 或使用 git add . 添加所有文件

此时如果查看暂存区状态,能看到当前文件夹和暂存区各文件的状态。例如能够看到新文件中有刚添加的文件,另外还有未添加至 git 暂存的文件,已经添加至 git 但是被删除的文件等。

# 查看暂存区状态
git status

此时就将文件添加至暂存区了

设置 git

设置一下 git 才能提交至本地仓库

git config --global user.email "[email protected]"	# 设置 email
git config --global user.name "your name" 	# 设置用户名

提交至仓库

当更新完暂存区的状态后,可以将暂存区的文件提交至仓库

git commit -m '这里写备注说明详情'

这样就可以在仓库中创建一个新的版本

查看 git 日志

通过日志可以查看日志信息,包括之前提交的提交人员、版本、时间、备注信息等

git log

本地 git 的三大区域

git 有三个区域

  • working tree : 工作区,就是工作所在目录,当代码进行修改或文件有变动 working tree 的状态就改变了
  • index file : 索引文件,也叫暂存区。它是连接 working tree 和 commit 的桥梁。每当使用 git add 命令登记后, index file 的状态就改变了,此时 index file 和 working tree 趋于同步
  • commit : 将暂存区的文件提交至仓库。因为仓库会记录所有的 commit 历史,所以 commit 的状态通常是仓库中最新版本的状态

git 有命令来检查这三个区域的不同:

git diff	# 查看 working tree 和 index file 的差别
git diff --cached	# 查看 index file 与 commit 的差别
git diff HEAD # 查看 working tree 和 commit 的差别(HEAD 代表的是最近一次 commit 的信息)

本地 git 的机制和状态维护

工作区就是本地代码文件目录,commit 就是提交到仓库后的(最新)状态。

暂存区是一个快照,初始默认是空的,使用 git status 查看状态会显示快照比对后的结果。

例如上次提交后(此时暂存区保留了一个状态),在工作区删除了某一个文件,暂存区经过快照比对后会标注某文件被删除。这时使用 git add / rm 来将新建的文件提交至暂存区,或将已经删除的文件从暂存区里确认删除(即提交文件被删除的状态)。git add 实际上是对暂存区状态的修改,是根据工作区修改暂存区的状态。例如删除了文件后,再使用 add 添加此文件,会将文件被删除的状态添加到暂存区。

add 会将文件状态添加到暂存区,rm 会将文件从暂存区和工作区同时删除。

也可以根据暂存区的状态修改工作区的文件,例如有文件被删除了,暂存区快照比对后会标识为 deleted,可以通过这个命令恢复此文件。

git checkout --filename		# 按照暂存区的状态修复文件
git checkout .		# 全部文件按照暂存区的状态修改,即放弃所有没有 add 的修改

即通过 git add / rm / checkout 来维护 working tree 和 index file 的状态

暂存区也会和 commit 进行比较,如果有不同的地方,会在 commit 时将不同处进行提交。将暂存区状态修改至我们需要的状态,然后再 commit 进行提交,就会将此时暂存区的文件提交至仓库,形成一个新的版本。

回滚机制

如果有需要,可以恢复至仓库中的某一版本

# 恢复至某仓库中的某一版本
# --hard 参数可以直接同步工作区的文件,否则需要手动从暂存区同步
git reset --hard <ID>		# 恢复至版本号的版本,版本号可以是部分,只要能唯一定位即可
git reset --hard HEAD		# 恢复至 HEAD(最新)版本
git reset --hard HEAD^		# 恢复至 HEAD 版上一个版本
git reset --hard HEAD^^		# 恢复至 HEAD 版上上个版本

需要注意的是,一旦 reset 到某一版本,此版本即变为HEAD版,在 log 中之后的版本会被丢弃。但是可以使用 git reflog 来查看版本变更信息,这时还可以通过 reset 命令恢复到某一版本。使用 git reflog 时如果太多会提示需要翻页,按任意键可以翻页,按英文 q 则退出。

即通过提交 git commit / reset 来维护 index file(working tree) 和 commit 仓库的状态

忽略文件

在使用 git 时,有时候需要忽略一些文件,例如临时文件、缓存、调试文件等。可以在项目根目录创建文件 .gitignore ,然后可以以文本格式进行编辑,将需要忽略的文件规则添加进去,每行是一条规则。添加内容的格式为:

# 可以使用 # 号进行注释
# 直接确定需要忽略的文件名
temp.txt
# 使用通配符 *
*.tmp
# 使用 ! 表示从忽略规则中例外,即不忽略
!go.tmp
# /表示从根目录指定目标,不忽略子目录中的同名目标,例如 subdir/TODO
/TODO
# 忽略目录下所有文件
build/
# 忽略目标目录下的目标文件,但并不包括其他子目录下的同名文件,例如 doc/server/arch.txt
doc/*.txt
# 忽略目标目录下的以及所有子目录下的某些文件,例如 doc/a.pdf 和 doc/aa/a.pdf
doc/**/*.pdf

忽略已经跟踪的文件

忽略文件操作应该在文件被纳入版本管理,即跟踪(创建)前进行,如果文件已经被跟踪了,即使声明忽略也不起作用。此时则需要从管理缓存中清除该文件:

# 删除单个文件管理缓存
git rm --cached targetfile
# 删除全部管理缓存,清除之后需重新添加
git rm -r --cached .
git add .

分支

当从某版本开始,之后的版本可能会有不同,则生成了不同的分支。例如版本4和版本5都是从版本3生成的,但是这两个版本是不同的,这就产生了分支。分支是可以合并的,方便灵活使用和修改。

例如在版本3后继续开发版本4到一定程度后,因为特殊原因需要回滚到版本3进行修改生成版本5,这时可以将版本4保存为一个分支,在完成了版本5后可以和版本4进行合并,继续完成版本4的功能生成版本6。

需要注意的是,在某一个分支上修改代码,如果没有进行 commit 就切换分支,那么修改部分是会带到切换的分支中去的。如果不想 commit ,可以使用 git stash 隐藏当前工作现场,使用 git stash list 查看隐藏起来的工作现场。恢复隐藏的工作现场有两种方式:

  1. git stash apply 恢复。恢复后,stash list 中并不删除恢复的 stash,需要用 git stash drop 来删除。
  2. git stash pop,恢复的同时把stash内容也清空了,这时候再用 git stash list 就看不到stash了。

在 git 中,默认主线名称为 master ,其他分支可以自定义名称。可以查看当前分支

git branch 	# 查看当前分支情况

当有需要时,可以创建新分支,例如创建分支 dev。

git branch dev	# 创建分支 dev

需注意的是,创建了新分支后,当前版本还处于老分支。如果需要使用新分支则需要切换

git checkout dev	# 切换到分支 dev

切换分支,即重置版本为创建分支时的状态。例如在开发过程中,切回主分支处理 bug

git checkout master		# 切换回分支 master
git branch bug		# 创建分支 bug
git checkout bug	# 切换到分支 bug

当在某一分支处理完成后,可以合并到主分支。这时需要切换到主分支,然后进行合并(当没有冲突时能够直接合并)

git checkout master		# 切换到主分支
git merge bug		# 合并 bug 分支

此时使用 git log 可以看到 master 和 bug 分支合并了,该分支的使命暂时也就结束了,可以删除了

git branch -d bug	# 删除 bug 分支

此时可以切换到开发分支继续开发,注意此时 dev 分支中的 bug 是没有处理的情况

git checkout dev	# 切换回 dev 分支,继续开发

当开发完成,则需要将 dev 分支合并回 master 分支。需注意的是,因为 dev 分支是没有修复 bug 的,而 master 是修复了 bug 的,这里就是一个冲突。

git checkout master 	# 切换到 master 分支
git merge dev		# 合并 dev 分支

合并后,因为有冲突,所以 git 会进行提示,同时冲突文件中也会将冲突代码标出。这时需要手动将冲突文件进行更改,然后再次提交为没有冲突的版本。

在开发中,dev 分支应该是以 master 最新的代码进行开发,但是如果 dev 分支不是 master 分支最新的代码,则可以将 master 分支合并到 dev 分支中(只是代码合并,分支并没合并),相当于更新以下 dev 分支的代码。

git checkout dev	# 切换到 dev
git merge master	# 将 master 分支代码合并过来

使用网络托管仓库

可以将本地仓库同步至网络的代码托管平台,例如 github、码云(gitee)、扣钉(coding)等。

  • 码云开源中国推出的基于 Git 的代码托管平台
  • 扣钉是腾讯旗下的一个代码托管平台
  • Github是全球最大的一个代码托管平台

首先,在选择好的平台上注册账号,并建立好托管仓库。建立好托管仓库后,会有一个仓库链接地址(无论是自己的还是其他人的,都会有),通常包含了用户、仓库名称,且以 .git 结尾。

克隆

已有的仓库可以克隆到本地,在需要克隆仓库的文件夹中执行

git clone 仓库链接地址

如果是新建立的托管仓库,克隆到本地后会是一个空仓库,可能里面会有 README.md。使用这个文件夹写项目代码就可以了。注意,使用 clone 克隆有分支的仓库只显示了 master 分支,但是其他分支也是存在的,可以直接切换。

如果已有代码,可以将自己的代码文件复制到此仓库,此时暂存区是空的,添加文件至暂存区,并提交。

git add .
git commit -m '这里写备注信息'

创建远端

也可以不使用克隆,而是将本地现有的仓库远程提交(连接至服务器仓库)

# 在 仓库地址 中建立名为 仓库名称 的远端仓库,等于将本地仓库链接到远端仓库
git remote add <仓库名称> <仓库地址>
# 添加文件并提交至本地仓库
git add .
git commit -m '这里写备注信息'

可以查看创建好的远程信息

git remote	# 查看已经创建的远程仓库
git remote -v	# 查看远程仓库对应的本地仓库
git remote show 仓库名 	# 查看具体的远程仓库的信息

推送

commit 提交的是本地仓库,然后需要将本地仓库同步到服务器上。推送时是需要用户名和密码的,就是在托管平台注册的账户。

git push 仓库名称 分支名称 # 将本地仓库推送到服务器
# 如果是使用远端创建,第一次推送时需要参数 -u 
# git push -u 仓库名称 master
# 以上命令只推送一条分支,如果需要推送其他分支,则重复执行
# git push -u 仓库名称 dev

推送完成后,可以在服务器的仓库中看到。

需要注意的是,提交的版本必须是新版本,如果本地仓库里的版本比服务器仓库的版本低则会报错,需要先拉取,然后提交,再推送。

拉取

如果托管仓库中的代码和本地仓库不同(例如在另一台计算机修改了代码并成功提交推送),可以从托管仓库中拉取

git pull 仓库名称 分支名称	# 将服务器托管仓库拉取到本地

拉取后会有提示,哪个文件有变动。此时本地文件和托管仓库中的文件就会同步了,实际上仓库的版本信息也会同步,有需要也可以重置为历史某一版本。

更新

个人使用时,每次有改动都提交并推送,保证远端仓库是最新版本。

保存设置信息

使用远端仓库时,可能需要远端的用户名密码。如果每次都需要输入用户名密码嫌麻烦,可以创建本地保存文件以记录这些信息。进入项目文件夹进行操作:

git config --global credential.helper store

变基 rebase

当提交次数变多,在一条分支上会产生越来越多的版本记录,可能很多的中间版本记录是无意义的,这时可以通过变基来合并这些无意义的中间版本成为一条记录。

git rebase -i 版本号		# 将目标版本到目前版本进行合并
# 或使用 git rebase -i HEAD~3	# 从 HEAD版本往上找3个版本(包含HEAD版本)进行合并

执行完成后,会提示给合并的各版本做标记

  • p : 使用此版本提交
  • s : 使用此版本提交,但是合并到上一个版本中
  • r : 使用此版本提交,但编辑提交信息

需注意,不推荐合并推送到服务器版本仓库的记录,因为可能会引起版本冲突。

关于开发环境,忽略文件

由于项目开发中,使用不同的 IDE 会往项目目录中添加不同的文件或配置信息,同时不同的开发环境也会造成代码文件有不同。所以在使用时需要设置忽略文件,将 IDE、环境等添加的和项目代码无关的文件忽略。

在仓库文件夹内创建 .gitignore 文件,在此文件中列出的文件和目录会被 git 忽略。例如

# 忽略 dist 文件夹
dist/
# 忽略所有 .spec 结尾的文件
*.spec

如果是在建立托管仓库时,选择创建忽略文件,则会自动创建该语言开发中应该忽略的各种文件。

团队开发

github 可以创建组织,进行团队管理,当有组员上传项目后并通过后,能够自动更新生产环境。

创建组织

团队开发需要先创建个组织,使用 New organization,然后填入组织名称(Organization name),选择免费组织,根据提示填写一些信息,然后就可以创建了。

接下来可以添加组织成员,或之后再添加。

创建团队

在组织界面,点击 Team 标签,进入团队选单。点击 New Team 创建新团队。

填写一些团队信息,例如团队名称等。然后就可以创建团队,并添加成员。一个团队默认最多5个成员。

创建仓库

在组织下创建仓库,和个人仓库创建方法一样。创建好仓库后,在设置里面的 Collaborators & teams 栏中,添加创建的团队,并设置权限。

创建项目

团队组长来创建项目(同个人),包括 README.md、环境等基础文件,然后上传项目代码到仓库。其他团队人员克隆此仓库。

拉取、推送

组长创建好项目后,团队成员就可以拉取项目文件了。然后各自进行开发,完成后可以将各自开发的文件推送到仓库中。

拉取时如果没有冲突(没有多人修改同一文件,或多人修改同一文件的非同一部分代码),会直接拉取或自动合并拉取(合并拉取后,会要求直接提交,需要输入提交信息)。

如果因为文件改动出现冲突,可以参考冲突处理。推送本地代码时也可能会因版本、文件改动出现问题,可以参考更新

冲突处理

当某文件仓库和本地都有改动时,拉取和推送就会产生冲突:以仓库为主则本地的更改会丢失,以本地为主仓库的更改会丢失。git 推荐解决冲突的方法是:检测冲突文件,并结合双方更改的代码合并成为新的文件。

通常用户有四种处理方法:

  • 直接 commit 本地的修改,即以本地为主(不建议)
  • 通过 git stash 将工作区恢复到上次提交的内容,同时备份本地所做的修改,之后就可以正常 pull 了。完成后,执行 git stash pop 将之前本地做的修改应用到当前工作区(合并,常用,但是冲突部分会被本地代码覆盖)
git stash
git pull
git stash pop
  • 直接拉取,拉取后产生冲突的文件内容会被修改,根据修改的内容手动确定使用哪段代码,然后保存并提交(合并,不会出错,但是手动需手动确定冲突部分),注意更新远端。
  • 放弃本地修改,拉取远程仓库代码,以远程为主(本地代码丢失,不建议)
git reset --hard
git pull

更新

更新实际上就是将本地我呢见推送到服务器。当更新时会检测服务器版本,当服务器版本比本地版本新时,需要先拉取,并处理冲突,将本地版本变为最新版,再推送更新。

猜你喜欢

转载自blog.csdn.net/runsong911/article/details/127259266