IT评测·应用市场-qidao123.com

标题: github和git的简单使用 [打印本页]

作者: 张春    时间: 2025-3-2 16:50
标题: github和git的简单使用
简介

github和git是每个程序员都必须把握的技能,在这里对两个工具作入门介绍。
github

github是代码托管平台,付费用户可以建立私人仓库,免费用户只能使用公共仓库,也就是代码要公开,它可以资助开辟者存储和管理其项目源代码。

github和git的关系:github使用git作为版本管理工具。
简单使用

新建仓库:

删除仓库:

搜项目的技巧

这里介绍一些实际的使用案例:

git

简介

git是一个免费的、开源的分布式版本控制体系,诞生于2005年,早先是为了更好地管理Linux内核的开辟而建立的。
版本控制

版本控制:对文件的修改做记录,相称于文件备份,用户可以在必要时将文件切换到以前的版本。版本控制是由个人开辟过渡到团队协作过程中诞生出的产物,创建版本控制工具的目的就是为了方便多个开辟者对同一个项目举行开辟。
版本控制工具的必要提供的功能:

分布式版本控制:每个人都工作在通过克隆建立的当地版本库中,每个人都用于一个完备的版本库,所有操纵都直接在当地完成而不必要网络毗连
版本控制工具的汗青

最早是使用diff和patch两个命令,后来是CVS和SVN
diff、patch

diff:以举动单元比力多个文件之间的差异,也可以比力文件夹

patch:使用patch命令,根据diff命令生成的差异文件,来规复原始文件。这个命令使用比力复杂,而且如今用处不大,所以只是了解一下即可
CVS

Concurrent Versions System,版本控制工具,诞生于1985年,是早期的一款版本控制工具
SVN

subversion,诞生于2000年方一款版本控制工具
安装和设置

下载地址:http://git-scm.com/downloads。针对差别的平台,选择自己必要安装包
安装:下载完成后傻瓜式安装即可
设置git:在命令行实验如下命令

git的设置文件:

入门案例

在这个入门案例中演示如何使用git来做版本管理,重要通过命令行来操纵git

这里只演示最根本的使用,更加具体的操纵随后学习
代码库

代码库就是存储代码的地方,git的作用,就是管理代码库。
使用git,创建一个代码库,将自己的代码存放到代码库中,就可以对代码举行版本管理了。
代码库的构成


对代码库举行版本管理的大致流程


git的根本操纵

要在代码库中使用git命令才有意义
创建代码库


操纵代码库

在工作区中编辑文件

工作区,就是和.git子目录平行的别的位置,在工作区中创建几个文件而且编辑一些样例数据。
把工作区中的文件添加到暂存区

使用add命令,把工作区中的文件添加到暂存区:git add <file1 .... | dir1 dir2 | .>,点代表所有文件
把暂存区中的内容提交到当地库

git commit [-a | -m <message>]

查看提交日志

git log [--pretty=oneline | --oneline] [--stat] [file]:查看某个文件汗青提交记录,或所有的汗青提交记录

git reflog:简略地展示每次提交的信息,而且会额外展示当前指针指向的位置。
从版本库和工作区中删除文件


重命名文件

git mv 旧文件名 新文件名
比力文件的前后差异

git diff [--cached | HEAD] [file]:默认比力工作区和暂存区之间的文件的差别,字体的颜色,白色表现无变化,红色表现已删除,绿色表现已新增。

git blame <file>:以列表的情势表现某个文件的修改记录
版本的前进和后退

git reset HEAD~{1,2..} <file>:使用reset命令来实验版本的前进和后退。reset的含义是重新设置,设置当前HEAD指针到指定的阶段,HEAD指针是git创建的默认指向master分支的指针

reset命令的三种使用方式:

查看工作区和暂存区的当前状态

git status [-s | -b]

查看资助信息

git help:在命令行查看简单的资助信息
git 子命令 --help:会打开一个网页,网页中的内容是当前命令的具体信息
忽略某些在工作区但是不必要举行版本管理的文件

.gitignore文件:在工作中,并不是所有的文件都必要保存到版本库中,例如 target 目录下的文件九可以忽略。在git工作区的根目录下,创建一个特殊的 .gitignore 文件,在这个文件中,每一行指定一个忽略规则。前面的规则会覆盖反面的规则
忽略规则的语法:

最好在初始化当地库之后就创建 .gitignore 文件并订定忽略规则,在2.x版的git中,如果文件没有被add,而且它符合随后创建的忽略规则,那么它会自动被忽略
git分支

分支:可以明白为代码的差别版本,差别的人操纵差别的分支,末了再合并分支。分支可以用于并行推进任务,而且一个任务的失败不会影响到另一个任务,可以增加效率
之前所有的操纵都是在同一个分支下举行的,但是在实际开辟中,开辟者通常是在自己的分支下开辟代码,开辟完成后,把自己的代码提交到主分支中
master分支:git自带的分支,默认的主分支
新建分支

git branch <分支名>:如果没有任何参数,表现查看当前所有分支,哪个分支开头带 *,当前就在哪个分支

切换分支

git checkout <分支名>切换到指定的分支

在当前分支中合并别的分支

git merge <分支名>,在当前分支中合并指定分支的内容。如果修改有冲突,会集并失败。
git合并分支时遇到的两种情况:fast-forward和Three-way merge。

解决当地合并冲突

当地库和远程库的交互

之前所有的操纵都是在当地库,在实际开辟中,所有开辟者从远程库获取代码,开辟完成后,必要把代码上传到远程库,然后其他人再从远程库中拉取代码,获取最新的修改
在这里,当地库是使用git维护的当地仓库,远程库是在github上创建的仓库
创建远程库

在github上创建一个仓库,本文件之前的内容中有讲
克隆远程库到当地

git clone <uri>:它会完备的把远程库下载到当地、创建远程库别名、初始化当地库,在实验命令之前,不消特意创建一个文件夹,这个命令会自动创建文件夹。在github的仓库页面上可以找到代表仓库的uri。
为当地库关联一个远程库

git remote add <name> <url>,

如果远程仓库是空的,当地的内容可以直接提交到远程仓库,如果远程仓库有内容,应该先把远程仓库的内容clone下来
当地库的代码推送到远程库

查看当地库管理的远程库地址:git remote -v
实验推送命令:git push [<远程库别名>] [<当地库分支>],默认的远程库别名是当前关联的远程库,默认的分支是当前分支
从远程库拉取代码

第一步:git fetch <远程库别名> <当地库分支> ,拉取分支信息
第二步:git pull [<远程仓库名>] [<远程分支名>]:[<当地分支名>]:默认从当前当地库对应的远程库下同步文件,如果当地分支名是当前分支,可以省略不写。如果pull时报[rejected]错误,表现远程仓库的分支和当地分支出现了冲突,建议修改当地仓库,以和远程仓库保持一致
使用github

在github上创建分支

第一种方式:点击搜索框 - view all branch - create new branch,创建新的分支
第二种方式:也可以在当地创建分支,然后把当地分支提交到github上,提交命令:git push <远程库名称> <当地库分支>,如果远程库没有相同的分支,默认会创建一个
在github上约请开辟者

在仓库界面:settings - collaborators - add people,约请开辟者后,别的开辟者也可以为当前项目提交代码
github中的fork和pull request

fork:复制目标仓库到自己的github账户下
pull request:合并别的人的提交,用户跨团队协作
git中的tag

tag是版本库的一个标记,指向某次提交的指针,是静态的、不可移动的。它重要用于标识重要的快照,例如线上发布时使用的版本
注意:tag是针对某次提交的,如果打tag时当前有未提交的代码,未提交的代码不会被包含在tag中,tag没有与分支直接关联。如果tag关联的提交被回退了,tag也会正常存在,但通常不会在开辟中打tag,都是上线前为稳定的代码打一个tag。
使用案例:每次发布都使用tag来打发布包,如果要回滚,就使用上一个tag打包,所以tag通常指向一个稳定的代码版本。
操纵tag


tag和分支之间的关系

独立性:tag和分支是两种差别的git引用范例

用途:

操纵差异:

maven 使用tag打发布包

第一步:将代码切换到某个tag git checkout <tagname>
第二步:打包 mvn clean package
使用某个分支打包也一样,将代码切换到分支,然后实验maven的打包命令
git stash命令

git stash:将当地没有提交的内容举行缓存并从当前分支移除,缓存的数据结构为栈,先辈后出。
作用:当用户拉取远程分支的代码,但是当前分支已经作出一些修改时,可以使用git stash命令,隐蔽当前分支的修改,然后拉取远程分支,然后再通过git stash命令,弹出刚才的修改,弹出后可能必要合并冲突
git stash命令的使用


变基操纵 rebase

一种将一系列提交从一个分支上摘下来,然后再应用到另一个分支上的机制。这个操纵常用于清理提交汗青,使得项目的汗青变得更加线性和易于明白。变基可以用来整合两个分支的更改,或者将当地分支上的更改重新基于远程分支的最新状态。
变基会改变提交的哈希值,因为它实际上是创建了一个新的提交序列。这意味着变基是一种“粉碎性”操纵,应该谨慎使用。
变基是一种强大的工具,可以资助用户维护一个干净有序的项目汗青,但在使用时必要考虑到团队协作的影响。在团队中使用变基之前,最好与团队成员沟通,确保各人对变基的操纵和影响有共同的明白。
不要在已经推送到远程仓库的分支上举行变基:如果已经将分支推送到了远程仓库,然后对分支举行了变基并再次推送,这可能会给其他协作者带来麻烦,因为他们必要处置处罚非快进更新。
git的使用经验

使用git的精确步骤

先拉取当前分支的最新代码,然后开辟代码、提交自己的代码。如果合并到master分支时发现冲突,把master分支的代码合并到当前分支
取消ssl校验

如果设置了ssh,可能会报错,fatal: unable to access 'https://github.com/wuyaojun108/storage-code.git/': OpenSSL SSL_read: Connection was reset, errno 10054。这是服务器的SSL证书没有经过第三方机构的签订,所以报错。实验命令:git config --global http.sslVerify "false",取消ssl校验,可以解决这个题目。
根据管理器:点击左下角的win图标,输入根据管理器,然后打开
切换分支时报错

切换分支:git checkout -b <当地分支名> origin/<远程分支名>
报错:fatal:‘xxx’ is not a commit and a branch ‘xxx’ cannot be created from it
缘故原由:因为远程新建的分支没有更新到当地,用checkout命令是从当地仓库找分支的,当地仓库只有在举行网络请求时才会跟远程仓库交互,应该先实验git fatch命令
在IDEA中使用git

设置git和github

设置git:file - settings - version control - git,在 path to git executable 对话框中,选择 git.exe 地点的路径
设置github:file - settings - version control - github,重要是设置仓库地址和github账号,点击 + 号,选择 log in with token,点击 generate,登录github,生成 token,复制到IDEA中,点击add account
使用经验

解冲突

如果两个分支对于相同的依靠做了差别的升级:

对于代码冲突,如果是差别功能,只是代码恰好在一个类中,merge即可,否则必要和同事商量
回退到某个版本

我遇到的题目是,我修改了两个文件,把它们发到了线上,但是随后发现文件里有错误,造成了题目,盼望可以或许回退到这两个文件之前的版本。
方法1:force push,先在当地回退到想要的版本,然后点击force push,逼迫提交当地代码,远程分支也会回退,使用force push比力危险,它会修改远程分支的提交汗青,必要先和同事打声招呼。(IDEA中,点击push图标旁边的倒三角,就可以看到force push)
方法2:show repository at revision,查看某次提交时的仓库信息,从仓库中找到文件,根据文件中的内容举行回退
第一步:show repository at revison:

第二步:仓库快照信息。在左侧会表现仓库这次提交的快照信息,根据快照中的文件来修改代码,让后重新提交

查看一个分支从哪个分支中被check出来的

git reflog show ${branch-name},查看分支的提交汗青
查看某个commit的详情,根据commitId

git show ${commit-id}
diff命令 比力两分支之间的不一致

git diff --name-only ${commitId1} ${commitId2}
报错记录

pull代码失败 报错 You have divergent branches and need to specify how to reconcile them.

解决方法:在当地实验git命令 git config pull.rebase false,它用来设置pull操纵的默认举动,实验这个命令后,Git会将合并作为拉取远程分支更新时的默认计谋,而不是变基(rebase)。
从 Git 2.27 版本开始,Git引入了一个新特性,要求用户明确指定在拉取操纵中如何处置处罚已经偏离的分支。这意味着如果用户没有明确设置 pull.rebase 的值,Git 会表现警告信息,并要求用户设置一个默认举动。这样做的目的是为了克制在没有明确意图的情况下不小心覆盖掉分支上的提交汗青。
在 Git 的早期版本中,当用户实验 git pull 命令时,如果没有指定特定的计谋,Git 默认会尝试快进合并(fast-forward merge)。如果快进合并不实用,Git 会实验一个普通的三方合并,创建一个新的合并提交。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/) Powered by Discuz! X3.4