GIT版本控制工具

Git版本控制工具

第一章 版本控制工具简介

1.版本控制工具的发展历史经过: 原始人工维护状态,本地RCS,集中式如VCS、SVN和分布式如Git;

2.版本控制工具提供了协作开发的能力,借助它们我们可以回到任何时间的代码状态;

3.集中式版本控制工具,几乎所有的动作都需要服务器参与,并且数据安全性与服务器关系很大

4.Git 是分布式版本控制工具,除了与服务器之前进行按需同步之外,所有的提交操作都不需要服务器

第二章Git安装与配置

Git基本配置

  1. 配置个人身份:

首次的Git设定

git config --global user.name "Zhang San"
git config --global user.email [email protected]

该配置信息会在Git仓库中提交的修改信息中体现,但和Git服务器认证使用的密码或者公钥密码无关(责任追踪、应用之间的用户关联、贡献度统计)

  1. 文本换行符配置:

假如你正在Windows上写程序,又或者你正在和其他人合作,他们在Windows上编程,而你却在其他系统上,在这些情况下,你可能会遇到行尾 结束符问题。 这是因为Windows使用回车和换行两个字符来结束一行,而Mac和Linux只使用换行一个字符。 虽然这是小问题,但它会极大地扰乱跨平台协作。
Git可以在你提交时自动地把行结束符CRLF转换成LF,而在签出代码时把LF转换成CRLF。用core.autocrlf来打开此项功能,如果是在Windows系统上,把它设置成true,这样当签出代码时,LF会被转换成CRLF:

 git config --global core.autocrlf true

Linux或Mac系统使用LF作为行结束符,因此你不想Git在签出文件时进行自动的转换,当一个以CRLF为行结束符的文件不小心被引入时你肯定想进行修正,把core.autocrlf设置成input来告诉Git在提交时把CRLF转换成LF,签出时不转换

git config --global core,autocrlf input

这样会在Windows系统上的签出文件中保留CRLF,会在Mac和Linux系统上,包括仓库中保留LF.
如果你是Windows程序员,且正在开发仅运行在Windows上的项目,可以设置false取消此功能,把回车符记录在库中:

 git config --global core.autocrlf 
  1. 文本编码配置
  • i18n.commitEncoding 选项: 用来让git commit log存储时,采用的编码,默认UTF-8.
  • i18n.logOutputEncoding 选项:查看git log时,显示采用的编码,建议设置为UTF-8.
#中文编码支持
git config --global gui.encoding utf-8
git config --global i18n.commitencoding utf-8
git config --global 
i18n.logoutputencoding utf-8
#显示路径中的中文:
git config --global core.quotepath false
  1. 与服务器的认证配置

常见的协议分为http/https协议认证和ssh协议认证

#设置口令缓存:
git config --global credential.helper store
#添加HTTPS证书信任:
git config http.sslverify false

ssh协议认证

SSH协议是一种非常常用的Git仓库访问协议使用公钥认证、无需输入密码,加密传输,操作便利又保证安全性

#生成公钥
ssh-keygen -t rsa -C [email protected]

添加公钥到代码平台 :

  • 代码平台
  • 进入“Profile Settings’
  • 点击左侧栏的“SSH Keys’
  • 点击“Add SSH Key”,将刚生成的公钥文件的内容,复制到“Public Key”栏,保存即可

第三章 Git基本命令

3.1工程准备

git clone远端服务器的某个工程前提条件:

  • Git账号有访问、下载工程权限
  • 获取该工程的Git仓库URL
#在本地目录下新建git项目仓库
git init [project name]
#克隆远端工程到本地磁盘
git clone [URL]  或者 git lfs clone [URL]
#git lfs clone是针对二进制文件的区别管理

3.2新增/删除/移动文件

  • 在提交修改文件之前,需要git add把文件添加到暂存区;如果该文件是新创建,尚未被git跟踪的,需要先执行git add将该文件添加到暂存区,再执行提交如果文件已经被git追踪,即曾经提交过的。在早期版本的git中,需要git add再提交;在较新版本的git中不需要git add即可提交

  • git rm将指定文件彻底从当前分支的缓存区删除,因此它从当前分支的下一个提交快照中被删除.
    如果一个文件被git rm后进行了提交,那么它将脱离it跟踪,这个文件在之后的节点中不再受git工程的管理。执行git rm后,该文件会在缓存区消失你也可以直接从硬盘上删除文件,然后对该文件执行 git commit,git会自动将删除的文件从索引中移除,效果一样

  • git mv命令用于移动文件,也可以用于重命名文件

    例1:需要将文件codehunter_nginx.conf从当前目录移动到config目录下,可执行:

    git mv codehunter nginx.conf config
    

    例2:需要将文件codehunter_nginx.conf重命名为new_nginx.conf,可执行:

    git mv config/codehunter nginx.conf config/new nginx.conf
    

3.3查看工作区

  • git diff用于比较项目中任意两个版本(分支)的差异,也可以用来比较当前的索引和上次提交间的差异。

GIT版本控制工具_第1张图片

  • git status命令用于显示工作目录和暂存区的状态

使用此命令能看到修改的git文件是否已被暂存,新增的文件是否纳入了git版本库的管理。下例中的信息表明: modeules/_init,py已被修改并暂存,LICENSE已被修改但未暂存,README.md已被删除但未暂存,extend.txt已被新建但未跟踪。注意,请保证能理解git status回显的每一行文字含义。

GIT版本控制工具_第2张图片

3.4提交更改的文件到本地版本库

git commit主要是将暂存区里的文件改动提交到本地的版本库

在此强调,提交这个动作是本地动作,是往本地的版本库中记录改动,不影响远端服务器。git ommt一般需要附带提交描述信息,所以常见用法是:

git commit file name -m “commit message'

如果要一次性提交所有在暂存区改动的文件到版本库,可以执行:

git commit -a m"commit message'

3.5查看日志

git log用于查看提交历史,会按提交时间由近到远列出所有的历史提交日志,包含每个日志基本包含提交节点、作者信息、提交时间、提交说明等

3.6推送到远端仓库

在使用git commit命令将自己的修改从暂存区提交到本地版本库后,可以使用git push将本地版本库的分支推送到远程服务器上对应的分支。
成功推动远端仓库后,其他开发人员可以获取到你新提交的内容
常用的推送命令格式:

git push origin branch_name

branch name决定了你的本地分支推送成功后,在远端服务器上的分支名,其他人据此可以获取该分支上的改动内容.

你的本地分支名可以与推送到远端的分支名不同:

git push origin branch_name:new_branch_name

### 3.7分支管理

git fetch的作用是,从远端服务器中获取某个分支的更新到本地仓库。注意,与`git pull不同,git fetch`在获取到更新后,并不会进行合并 (即下页中的git merge) 操作这样能留给用户一个操作空间,确认git fetch内容符合预期后,再决定是否手动合并节点。常用的获取远端分支更新命令格式:

git fetch origin remote branch:local branch

如果远程指定的分支与本地指定的分支相同,则可直接执行

git fetch origin remote branch

3.8分支合并

git checkout .

用于回退本地所有修改而未提交的文件内容

git checkout . ,这是条有风险的命令,因为它会取消本地工作区的修改(相对于暂存区),用暂存区的所有文件直接覆盖本地文件,达到回退内容的目的。但它不给用户任何确认机会,所以谨慎使用

如果仅仅想回退某个文件的未提交改动,可以使用

git checkout -filename

来达到目的;如果想将工具区回退 (检出)到某个提交版本,可以使用

git checkout commit_id.

ut .` ,这是条有风险的命令,因为它会取消本地工作区的修改(相对于暂存区),用暂存区的所有文件直接覆盖本地文件,达到回退内容的目的。但它不给用户任何确认机会,所以谨慎使用

如果仅仅想回退某个文件的未提交改动,可以使用

git checkout -filename

来达到目的;如果想将工具区回退 (检出)到某个提交版本,可以使用

git checkout commit_id.

你可能感兴趣的:(git,服务器,windows)