1.版本控制工具的发展历史经过: 原始人工维护状态,本地RCS,集中式如VCS、SVN和分布式如Git;
2.版本控制工具提供了协作开发的能力,借助它们我们可以回到任何时间的代码状态;
3.集中式版本控制工具,几乎所有的动作都需要服务器参与,并且数据安全性与服务器关系很大;
4.Git 是分布式版本控制工具,除了与服务器之前进行按需同步之外,所有的提交操作都不需要服务器。
首次的Git设定
git config --global user.name "Zhang San"
git config --global user.email [email protected]
该配置信息会在Git仓库中提交的修改信息中体现,但和Git服务器认证使用的密码或者公钥密码无关(责任追踪、应用之间的用户关联、贡献度统计)
假如你正在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
#中文编码支持
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
常见的协议分为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]
添加公钥到代码平台 :
git clone
远端服务器的某个工程前提条件:
#在本地目录下新建git项目仓库
git init [project name]
#克隆远端工程到本地磁盘
git clone [URL] 或者 git lfs clone [URL]
#git lfs clone是针对二进制文件的区别管理
在提交修改文件之前,需要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
git diff
用于比较项目中任意两个版本(分支)的差异,也可以用来比较当前的索引和上次提交间的差异。git status
命令用于显示工作目录和暂存区的状态使用此命令能看到修改的git文件是否已被暂存,新增的文件是否纳入了git版本库的管理。下例中的信息表明: modeules/_init,py已被修改并暂存,LICENSE已被修改但未暂存,README.md已被删除但未暂存,extend.txt已被新建但未跟踪。注意,请保证能理解git status
回显的每一行文字含义。
git commit
主要是将暂存区里的文件改动提交到本地的版本库
在此强调,提交这个动作是本地动作,是往本地的版本库中记录改动,不影响远端服务器。git ommt一般需要附带提交描述信息,所以常见用法是:
git commit file name -m “commit message'
如果要一次性提交所有在暂存区改动的文件到版本库,可以执行:
git commit -a m"commit message'
git log
用于查看提交历史,会按提交时间由近到远列出所有的历史提交日志,包含每个日志基本包含提交节点、作者信息、提交时间、提交说明等
在使用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
git checkout .
用于回退本地所有修改而未提交的文件内容
git checkout .
,这是条有风险的命令,因为它会取消本地工作区的修改(相对于暂存区),用暂存区的所有文件直接覆盖本地文件,达到回退内容的目的。但它不给用户任何确认机会,所以谨慎使用
如果仅仅想回退某个文件的未提交改动,可以使用
git checkout -filename
来达到目的;如果想将工具区回退 (检出)到某个提交版本,可以使用
git checkout commit_id.
ut .` ,这是条有风险的命令,因为它会取消本地工作区的修改(相对于暂存区),用暂存区的所有文件直接覆盖本地文件,达到回退内容的目的。但它不给用户任何确认机会,所以谨慎使用
如果仅仅想回退某个文件的未提交改动,可以使用
git checkout -filename
来达到目的;如果想将工具区回退 (检出)到某个提交版本,可以使用
git checkout commit_id.