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。
一个项目的星星越多,上涨越快,说明此项目在社区中认同度越高,类似于被点赞。
可以在 code 一栏中查看,主要是对于该项目的介绍。readme 是 markdown 格式的文本
Issues 在某种程度上来说,像是一种团队协作、头脑风暴的呈现形式。对于下一步需要完善的工序、项目的优化进程都可以在 issue 中找到动态——诸如 feature 的添加、bug 的修复等等。
仓库,顾名思义,就是用来存放我们想放在GitHub上的项目的地方,可以是代码项目,或者是任何其他内容。
创建完账号后,点击进入自己的主页 。这个「repositories」(中文:存放处)指的就是我们俗称的仓库。
通常新建立的账户会有默认的一个仓库 MyGit 。
可以在个人主页上新建仓库,也可以在仓库页新建。
新建仓库有几个需要注意的地方:
然后就可以创建仓库了。
新建的仓库可以直接使用,但是也可以进一步设置相关信息。进入仓库,点击 Settings,进行设置。
Fork 是复刻,在看到别的大神的仓库很棒,则可以使用 Fork 功能复制一个副本到自己的仓库,然后进行修改使用。
使用仓库同步代码需要使用 git 工具
linux 可以使用包管理工具,也可以使用源码进行安装。
使用源码安装,先下载需要的源码包
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 版本下载完成后,执行安装程序一路 next 就可以了。
当安装好 git 软件后,可以在本地将某一个文件夹(项目文件夹)变为 git 的仓库,之后代码放在此文件夹中。
在命令行模式进入需要创建 git 仓库的文件夹,并初始化 git
git init
完成后,就将此文件夹创建成了本地 git 仓库。
在仓库里可以存放各种各样的文件,需要使用 git 进行控制的文件需要先添加至 git 暂存
git add filename
# 或使用 git add . 添加所有文件
此时如果查看暂存区状态,能看到当前文件夹和暂存区各文件的状态。例如能够看到新文件中有刚添加的文件,另外还有未添加至 git 暂存的文件,已经添加至 git 但是被删除的文件等。
# 查看暂存区状态
git status
此时就将文件添加至暂存区了
设置一下 git 才能提交至本地仓库
git config --golbal user.email "you@example.com" # 设置 email
git config --global user.name "your name" # 设置用户名
当更新完暂存区的状态后,可以将暂存区的文件提交至仓库
git commit -m '这里写备注说明详情'
这样就可以在仓库中创建一个新的版本
通过日志可以查看日志信息,包括之前提交的提交人员、版本、时间、备注信息等
git log
git 有三个区域
git 有命令来检查这三个区域的不同:
git diff # 查看 working tree 和 index file 的差别
git diff --cached # 查看 index file 与 commit 的差别
git diff HEAD # 查看 working tree 和 commit 的差别(HEAD 代表的是最近一次 commit 的信息)
工作区就是本地代码文件目录,commit 就是提交到仓库后的(最新)状态。
暂存区是一个快照,初始默认是空的,使用 git status 查看状态会显示快照比对后的结果。
例如上次提交后(此时暂存区保留了一个状态),在工作区删除了某一个文件,暂存区经过快照比对后会标注某文件被删除。这时使用 git add / rm 来将新建的文件提交至暂存区,或将已经删除的文件从暂存区里确认删除(即提交文件被删除的状态)。git add 实际上是对暂存区状态的修改,是根据工作区修改暂存区的状态。例如删除了文件后,再使用 add 添加此文件,会将文件被删除的状态添加到暂存区。
add 会将文件状态添加到暂存区,rm 会将文件从暂存区和工作区同时删除。
也可以根据暂存区的状态修改工作区的文件,例如有文件被删除了,暂存区快照比对后会标识为 deleted,可以通过这个命令恢复此文件。
git checkout --filename # 按照暂存区的状态修复文件
即通过 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 commit / reset 来维护 index file(working tree) 和 commit 仓库的状态
当从某版本开始,之后的版本可能会有不同,则生成了不同的分支。例如版本4和版本5都是从版本3生成的,但是这两个版本是不同的,这就产生了分支。分支是可以合并的,方便灵活使用和修改。
例如在版本3后继续开发版本4到一定程度后,因为特殊原因需要回滚到版本3进行修改生成版本5,这时可以将版本4保存为一个分支,在完成了版本5后可以和版本4进行合并,继续完成版本4的功能生成版本6。
在 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 结尾。
已有的仓库可以克隆到本地,在需要克隆仓库的文件夹中执行
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
当提交次数变多,在一条分支上会产生越来越多的版本记录,可能很多的中间版本记录是无意义的,这时可以通过变基来合并这些无意义的中间版本成为一条记录。
git rebase -i 版本号 # 将目标版本到目前版本进行合并
# 或使用 git rebase -i HEAD~3 # 从 HEAD版本往上找3个版本(包含HEAD版本)进行合并
执行完成后,会提示给合并的各版本做标记
需注意,不推荐合并推送到服务器版本仓库的记录,因为可能会引起版本冲突。
由于项目开发中,使用不同的 IDE 会往项目目录中添加不同的文件或配置信息,同时不同的开发环境也会造成代码文件有不同。所以在使用时需要设置忽略文件,将 IDE、环境等添加的和项目代码无关的文件忽略。
在仓库文件夹内创建 .gitignore 文件,在此文件中列出的文件和目录会被 git 忽略。例如
# 忽略 dist 文件夹
dist/
# 忽略所有 .spec 结尾的文件
*.spec
如果是在建立托管仓库时,选择创建忽略文件,则会自动创建该语言开发中应该忽略的各种文件。
github 可以创建组织,进行团队管理,当有组员上传项目后并通过后,能够自动更新生产环境。
团队开发需要先创建个组织,使用 New organization,然后填入组织名称(Organization name),选择免费组织,根据提示填写一些信息,然后就可以创建了。
接下来可以添加组织成员,或之后再添加。
在组织界面,点击 Team 标签,进入团队选单。点击 New Team 创建新团队。
填写一些团队信息,例如团队名称等。然后就可以创建团队,并添加成员。一个团队默认最多5个成员。
在组织下创建仓库,和个人仓库创建方法一样。创建好仓库后,在设置里面的 Collaborators & teams 栏中,添加创建的团队,并设置权限。
团队组长来创建项目(同个人),包括 README.md、环境等基础文件,然后上传项目代码到仓库。其他团队人员克隆此仓库。
组长创建好项目后,团队成员就可以拉取项目文件了。然后各自进行开发,完成后可以将各自开发的文件推送到仓库中。
拉取时如果没有冲突(没有多人修改同一文件,或多人修改同一文件的非同一部分代码),会直接拉取或自动合并拉取(合并拉取后,会要求直接提交,需要输入提交信息)。
如果因为文件改动出现冲突,可以参考冲突处理。推送本地代码时也可能会因版本、文件改动出现问题,可以参考更新。
当某文件仓库和本地都有改动时,拉取和推送就会产生冲突:以仓库为主则本地的更改会丢失,以本地为主仓库的更改会丢失。git 推荐解决冲突的方法是:检测冲突文件,并结合双方更改的代码合并成为新的文件。
通常用户有四种处理方法:
git stash
将工作区恢复到上次提交的内容,同时备份本地所做的修改,之后就可以正常 pull 了。完成后,执行 git stash pop
将之前本地做的修改应用到当前工作区(合并,常用,但是冲突部分会被本地代码覆盖)git stash
git pull
git stash pop
git reset --hard
git pull
更新实际上就是将本地我呢见推送到服务器。当更新时会检测服务器版本,当服务器版本比本地版本新时,需要先拉取,并处理冲突,将本地版本变为最新版,再推送更新。