1.传统SCM与git的区别:
传统SCM问题所在:
● 脱离网络将无法实现软件版本控制,这样极为不方便;
● 使用SVN无法进行历史版本的方便浏览,基本上可以看见的都是最终版本;
● 使用SVN只能够进行简单的浏览。
传统SCM优点: 需要知道的SVN的出现时间比较早,而且整体的配置比较简单,同时许多的系统支持度也比较完善。
Git:利用GIT不仅可以方便的实现本地的代码管理,还可以实现公共网络的项目提交,甚至可以将开发者的开源项目公布到GitHub公共平台上进行源代码共享。
2.创建git仓库:
● 先进入自己要选择的目录:d盘下的happy文件夹:cd happy 以下的所有命令都是在此目录下使用,可以采用cmd命令行也可以使用Git Bash Here ,但都要在此目录下执行
● 初始化仓库:目录创建完成之后本身现在还不属于GIT可以使用的形式,如果要想使用它则必须对仓库进行初始化:git init 执行完此命令之后会在happy文件夹下生成一个.git文件夹,和.git同级的文件都受其管理。
3.git基本操作:git本质就是一个代码文件的管理工具
● 通过命令来观察当前的GIT仓库的监听:git status
● 红色文件(add之前):如果现在在仓库里面创建一个新的文件Hello.java,则该文件并不在GIT原始的文件监控范围内,所以此时会提示用户该文件属于一个
新的文件,并且给出了该文件在GIT中的各项操作。
● 如果此时需要将此文件交由GIT进行跟踪管理,那么就需要进行代码的跟踪提交,于是使用“ git add”命令完成:git add Hello.java
● 绿色文件:既然已经将此文件追加到GIT的跟踪范畴之中,所以这个时候就可以进行仓库内容的存储操作,同时也会将新增的跟踪文件进行了绿色字体的提示。
● 将程序代码提交到GIT仓库之中(使用“-m”参数设置注解信息):git commit -m "Add Hello.java File"
● 创建一个新的程序文件Emp.java
● 将Emp.java程序进行跟踪处理:git add Emp.java
● 但是在随后代码操作前忽然意识到这个文件的定义没有任何意义,所以应该进行删除,可以考虑从跟踪列表删除;
● 删除之前追加的跟踪操作:git rm --cached Emp.java
● 当前命令执行完成之后实际上将恢复到原始的未add前的操作状态。
3.GIT仓库组成:
通过之前的基本操作已经可以发现,在使用GIT处理的过程之中实际上所有提交仓库中的内容往往都要经过如下的几个步骤:
● 在指定的工作目录之中进行代码文件的编写
● 使用“ git add”的命令进行代码的跟踪追加
● 使用“ git commit”的命令进行真正的仓库提交。
实际上这样设计的主要的目的是为了防止错误的更新所造成的问题,也就是说在整个GIT版本仓库的组成里面有三个核心概念:工作目录、暂存区(加入到跟踪列表)、真实的存储仓库。
● 工作区本质上就相当于当前的“ d: happy”(即.git文件夹所在的目录)的目录,这个目录的作用是保存所有程序文件使用,但是这个目录下的文件是不会发布到仓库之中,只是一个临时性的存储操作。
● 如果此时工作区中的文件需要提交到GIT仓库之中进行管理,那么就执行“ git add”的命令进行操作,那么此时工作区中的文件将自动保存在暂存区里面。
● 当现在确定该文件需要进行仓库存储,那么就可以考虑使用“ git commit”指令将整个的暂存区中的内容提交到真实仓库之中(真正要进行项目发布的仓库)。在真正存储仓库里面(版本库)会有一个HEAD指向,那么该指向的具体的作用在于保存最后一次的提交点,可以把版本库中提交的步骤想象为一个栈,HEAD永远都指向栈顶部分,表示最后一次的提交。
4.版本穿越:引入版本控制工具最大的优势在于可以进行版本的回退处理,在版本库里面每一次提交的代码实际上都会生成有一个提交点,而所有的提交点可以通过HEAD来进行控制,HEAD描述的就是当前的提交点,那么改变HEAD的提交点的指向就可以实现版本的穿越操作。
● 如果要想知道当前的提交信息,则可以査看所有的提交日志: git log
● 实际上对于日志信息的浏览,也可以采用简化的方式来观察:git log --pretty=oneline
● 历史版本的回退重点在于HEAD指向的变更,那么此时可以退回到上一个提交点:git reset --hard HEAD~1
● 除了回退到上一个提交点之外,还可以回退到指定的提交点,那么此时就必须知道提交点的信息:获得提交点的信息:git reflog
● 恢复到某个提交点(如:d02a0b9)的状态:git reset --hard d02a0b9 只要代码提供有提交点的记录,就可以进行指定提交点的回退处理,这样即便代码出现了问题,也可以方便的进行快速的恢
复,而且最为重要的是这些恢复的操作是可以直接在开发者本人的电脑上单机运行。
5.GitHub远程仓库:现在的客户端如果要想将自己的代码发布到GITHUB之中,那么就需要进行代码的传输,所以就需要配置SSH-KEY
● 配置SSH-KEY
● 如果是linux操作系统就非常方便的实现公钥与私钥的创建了,而如果使用的是Windows系统的话就必须利用GIT安装时所提供的 git-bash工具来完成,直接通过鼠标右键运行bash
● 随后利用rsa的编码方式实现SSH-KEY生成:ssh-keygen -t rsa 然后连续按几次回车 保存路径C:\Users\用户名\.ssh\{私钥(id_rsa)、公钥(id_rsa.pub)}
● 复制好公钥的信息内容,随后进入到 GITHUB的设置页面。粘贴到SSH and GPG keys中的Key中,并起个名字
● 创建GITHUB操作:如果要想进行 GITHUB的代码发布,那么就必须在 GITHUB上提供有相应的仓库信息,而且这个仓库的名称最好和你的项目名称保持一致,理论上开发者可以创建N多个仓库。
● 随后输入仓库的相关信息(名称、仓库描述),而且仓库本身分为私有与共有两类仓库。由于已经设置了SSH免登录的配置,所以对于当前的操作里面可以直接使用SSH的方式连接当前的仓库:git@github.com:wxl123156/happy.git。
● 除了这些之外,在界面里面也提供有一些远程仓库的操作命令:
echo"# happy">> README.md
git init
git add README.md
git commit -m "first commit"
git remote add origin git@github.com:wxl123156/happy.git
git push -u origin master
● 客户端操作GITHUB
● 在本地仓库(d:\happy目录下)创建README.md文件:在此文件中写想让观看者看到的东西,例如:项目名称,项目名称,作者,联系方式等。
● 将文件提交到暂存库:git add .("."表示将所有新增的文件全部添加)
● 提交项目到版本库:git commit -m "Add README.md File"
● 建立本地仓库与远程的连接,而在本地来讲,远程仓库使用“ origin”名称来描述:git remote add origin git@github.com:wxl123156/happy.git
● 现在本地仓库中的所有代码并没有提交到远程仓库里面,所以此时需要进行代码的提交处理:
● 语法格式:git push -u 远程仓库 分支
● 代码提交:git push -u origin master 此时远程仓库里面就会出现有相应的代码信息
流程图如下:
● 使用 GITHUB不仅仅可以进行代码的存储,还可以进行代码的修改比对,例如,现在要修改程序文件(Emp.java)。
● 在本地修改文件Emp.java
● 将此文件提交到暂存库:git add .
● 将文件提交到版本库:git commit -m "Change Emp.java File"
● 向远程GITHUB提交:git push -u origin master
新代码提交之后可以直接在GITHUB上对修改前后进行浏览。(我忘记点击哪里可以浏览对比了)
● 除了可以向远程仓库提交项目之外,也可以将远程项目克隆到本地:想将远程项目克隆到哪个文件夹,就在哪个文件夹底下输入如下命令:git clone git@github.com:wxl123156/happy.git