Git学习笔记
- 格式:doc
- 大小:2.08 MB
- 文档页数:39
git的文件存储基本原理Git是一种分布式版本控制系统,用于管理和跟踪文件的修改历史。
它的文件存储基本原理是通过使用哈希算法,将文件内容进行唯一标识,然后将这些标识存储在一个称为对象库的地方。
在Git中,每个文件被视为一个对象,每个对象都有一个唯一的哈希值来标识它。
这个哈希值是通过对文件内容进行SHA-1哈希算法计算得到的。
因为SHA-1算法的特性,即使文件内容只有微小的变化,其哈希值也会完全不同。
这样,每次对文件进行修改后,Git就能够通过比较哈希值来判断文件是否有变化。
Git将每个文件对象存储在一个称为对象库的地方。
对象库是一个存储所有文件对象的地方,它可以位于本地计算机或远程服务器上。
对象库中的对象可以根据哈希值进行快速查找和访问。
当我们对文件进行修改后,Git会创建一个新的文件对象,并将其添加到对象库中。
这个新的文件对象会记录文件的新的哈希值、作者、修改时间等信息。
同时,Git还会创建一个称为提交对象的对象,用于记录这次修改的详细信息,如提交者、提交时间、提交消息等。
提交对象中也包含了指向这个新文件对象的指针,以便能够找到并检索到这个文件对象。
除了文件对象和提交对象,Git还有其他一些对象,如树对象和分支对象。
树对象用于组织文件对象,它类似于一个目录结构,可以将多个文件对象组织成一个树状结构。
分支对象用于标记一个特定的提交对象,以便能够轻松地访问和管理不同版本的文件。
通过使用这些对象,并根据它们之间的关系,Git能够有效地管理和跟踪文件的修改历史。
当我们需要查看文件的历史版本时,Git会根据提交对象之间的指针关系,依次遍历并检索相关的文件对象,然后将文件内容恢复到相应的版本。
这样,我们就能够轻松地查看文件的不同版本,并进行比较和回滚操作。
除了文件存储基本原理,Git还提供了许多其他功能,如分支管理、合并冲突解决、远程仓库同步等。
它的分布式特性使得多人协作更加方便,每个人都可以通过克隆仓库到本地来进行独立的开发和修改。
git总结1升级了git版本,git clone 的时候报了如下的错误fatal: unable to access 'https:///open-falcon/falcon-plus.git/': SSL connect error百度了好久,试了好多⽅法,最后google到了解决⽅法,特记录下解决⽅法: yum update -y nss curl libcurlgerrit 上查找多个⽤户的提交status:merged project:android/qiku/frameworks branch:QCOM_8976pro_7.x_360OS (owner:yangbinhu OR owner:zengzhigang OR owner:dengweihua OR owner:wangfuquan)====================================================================================================虚拟硬盘MYDROID root ⽤户密码:zzgubuntu root ⽤户密码:123456虚拟机安装配置gerrit过程###################################################### [001] Install virtualbox and init virtual machine1. Install VirtualBox2. Double click MYDROID\MYDROID.vbox to start the VirtualMachine.!!Recommand: free space of your VBox disk is larger than 300G建议系统安装的⼀个虚拟机硬盘上,再创建⼀个虚拟机硬盘挂载到系统中⽤于存放数据。
git的基本命令
Git 基本命令:
git init –初始化一个Git仓库
git config –设置Git的配置
git add –将文件添加到版本库
git commit –提交文件到版本库
git status –检查Git的当前状态
git log –显示有关提交的日志信息
git diff –查看提交之间的不同
git show –显示提交的详细信息
git remote –管理远程版本库
git checkout –切换分支或者回退版本
git reset –重置版本库到某个commit
git tag –加标签某个提交
git fetch –从远程仓库获取最新版本
git pull –从远程仓库获取最新版本并自动合并到当前git merge –合并分支到当前分支
git rebase –重新应用已存在的提交
git cherry-pick –选择提交放入当前分支
git blame –检查某行代码是谁提交的
git stash –把当前未完成的工作暂存起来
git revert –恢复版本库到某个commit
git clean - 移除未跟踪的文件
git archive –创建zip/tar文件。
Git学习⽂档#########################################################Study Document for Git#########################################################Git 基础Git ⽂件的三种状态:已提交(committed)、已修改(modified)和已暂存(staged)。
Git ⼯作⽬录的状态:已跟踪和未跟踪。
已提交表⽰数据已经安全的保存在本地数据库中。
已修改表⽰修改了⽂件,但还没保存到数据库中。
已暂存表⽰对⼀个已修改⽂件的当前版本做了标记,使之包含在下次提交的快照中。
基本的 Git ⼯作流程如下:1. 在⼯作⽬录中修改⽂件。
2. 暂存⽂件,将⽂件的快照放⼊暂存区域。
3. 提交更新,找到暂存区域的⽂件,将快照永久性存储到 Git 仓库⽬录。
Git 语法设置 Git 的配置git config --listgit config --global ***git config --global user.email @.comgit helpgit help verbgit verb --help克隆远端仓库git clone url检查当前⽂件状态git status列出当前分⽀和⽂件的状态:已跟踪/未跟踪。
[***@*** deployment]$ git status# On branch master# Untracked files:# (use "git add <file>..." to include in what will be committed)## test.mdnothing added to commit but untracked files present (use "git add" to track)跟踪新⽂件git add file[***@*** deployment]$ git add test.md[***@*** deployment]$ git status# On branch master# Changes to be committed:# (use "git reset HEAD file..." to unstage)## new file: test.md#Changes to be committed: 已暂存状态。
Git学习笔记之(⼀)使⽤gitgui从github上下载代码背景:⽬前⼀些开源代码均在 GitHub上管理的,包括⾃⼰写的代码也可以放在上⾯进⾏管理。
但问题是,当你换⼀台电脑,想要将你⾃⼰放在GitHub 上的代码⼯程下载下来的时候,会遇到各种问题,⽬前可以使⽤4种⼯具下载代码,可以使⽤两种不同的⽅式。
内容:1、使⽤ Git Gui 下载代码在官⽹下载 TortoiseGit 和 Git GUI for windows ,下载完成之后,进⾏安装。
图⼀在设定为 git 的⽬录中右键,打开 Git GUI 软件图⼆图三使⽤账号打开GitHub,同时打开⾃⼰的⼯程,在Clone or download 下拉之后,选择 use SSH,拷贝输⼊框中的内容到 Git GUI 界⾯中。
图四此时点击 Clone,会提⽰如下内容:此时应该是SSH-key没有⽣成,需要到 GitHub 上,打开settings ---> SSH and GPG keys ---> 点击右侧的 generating SSH keys,查看官⽅的介绍,如何⽣成SSH key。
⼤致步骤如下:(1) ⾸先检查服务器上否已经安装了 SSH key。
打开 Git Bash执⾏ ls -al ~/.ssh 命令,如下图可以看到以下列出了含有 SSH key的地⽅。
当列表⾥⾯没有数据的时候,此时需要⽣成⼀个新的 SSH key,并添加到 ssh-agent (见操作4)和 Git Hub(见操作3)中。
(2) ⽣成新的 SSH key打开 Git bash ⼯具执⾏ ssh-keygen -t rsa -b 4096 -C "your email@"(3) 将 SSH key添加到 GitHub上直接打开 id_rsa.pub⽂件;将其中的内容拷贝到 GitHub上(setting----> SSH and GPG keys )选择 New SSH key。
git常用语句
1. git init - 创建一个新的本地仓库
2. git clone [URL] - 克隆一个远程仓库到本地
3. git add [文件名] - 将文件添加到暂存区
4. git commit -m "提交信息" - 将暂存区的文件提交到本地仓库
5. git push origin [分支名] - 将本地仓库的文件推送到远程仓库
6. git pull origin [分支名] - 从远程仓库拉取最新的文件到本地仓库
7. git branch - 查看当前分支
8. git branch [分支名] - 创建一个新的分支
9. git checkout [分支名] - 切换到指定的分支
10. git merge [分支名] - 合并指定分支到当前分支
11. git status - 查看当前文件状态
12. git log - 查看提交历史
13. git remote add origin [远程仓库URL] - 添加远程仓库地址
14. git remote -v - 查看当前仓库关联的远程仓库地址
15. git diff - 查看当前文件与上次提交的差异
16. git reset [commit] - 撤销提交
17. git stash - 将当前修改的文件暂存起来
18. git stash pop - 恢复最近一次暂存的文件修改
19. git checkout -- [文件名] - 撤销对文件的修改
20. git remote update origin --prune - 清理远程仓库中已删除的分支信息。
git 原理
Git是目前最流行的分布式版本控制系统,它的原理十分重要。
Git 的原理是把文件系统的每一次变化都记录下来,以便在任何时刻回滚到之前的状态,并跟踪文件的更改历史记录。
Git的工作原理是把文件系统中的每一个文件都看作一个对象,这些对象可以是一个文件或一个文件夹,每一个对象都有一个唯一的SHA-1哈希值。
当文件或文件夹改变时,Git会根据更改计算出一个新的哈希值,把新的哈希值作为对象的更新标识符,并将其记录在Git仓库中。
Git使用三个主要数据结构:提交对象,树对象和标签对象。
提交对象是Git仓库中最重要的部分,它记录了文件系统的每一次变化,包括改变的文件、作者信息和提交时间等。
树对象记录了文件系统的当前状态,它的每个节点都指向一个提交对象,标签对象指向特定的提交对象,以便在任何时候轻松找到特定的版本。
Git的安全性也很重要,Git的每个提交对象都有一个SHA-1哈希值,该哈希值可以防止文件系统中的任何不安全的更改。
此外,Git 还配备了像GPG签名这样的安全策略,可以确保每次提交只能由授权的开发者提交。
总之,Git的原理是把文件系统中的每一个文件都看作一个对象,
每一个对象都有一个唯一的SHA-1哈希值,这些哈希值可以防止文件系统中的任何不安全的更改,同时Git也使用了一些安全策略,来确保每次提交都是安全可靠的。
本地分支解析git 通过可变指针来实现对提交数据的历史版本的控制,每当我们提交新的更新,当前分支(设为master)则指向最后一个提交更新A,而最后一个提交对象则存在一个指针指向前一次的提交更新Q。
如果我们创建一个新的分支,child,它和master共同指向A,这时,如果我们向child分支提交更新B,我们会发现child 指向B,而master依然指向A。
无论我们在child分支进行了任何开发,只要回到master分支,就能恢复到更新A的数据状态了。
在图片里,我们还注意到有一个head指针,一般来说,它会指向我们目前所在的工作分支。
现在它指向了我们的master分支,意思是master是我们目前的工作分支。
一旦提交更新,就会在master分支上提交。
现在,让我们看看与git 分支有关的操作命令:1. git branch [option] [name]如果不使用任何参数,它可以用来查看所有的分支,而在分支名前有*标记的则为主分支,如果加上name为创建新分支,,如git branch child,则会创建一个名为child 的分支,此外,它有一些常用的参数:2. git checkout [name]切换到对应的分支,对于上图,如果我们是使用git checkout child,我们的head 指针就会指向child分支了。
这时候,如果我们提交新的更新D,我们会发现:我们的D指向C,而C依然指向A,也就是说,以后我们在child分支上做的任何更新,都不会对master分支所在的之路造成任何影响!一旦使用了checkout命令,我们还会发现,不仅head指针会指向新的分支,而且当前工作目录中的文件也会换成了新分支对应的文件了。
此外,我们还可以使用git checkout -b [name]命令,它会新建一个分支,并自动将当前的工作目录切换到该分支上。
3. git merge [name]合并分支,有的时候,我们创建次要分支,可能是为了修改原有程序的bug,或为了拓展新的功能,这时候如果我们想把次要分支的修改何并进主分支中,我们可以使用git merge命令来实现。
git版本管理原理
Git是一种分布式版本控制系统,它的原理是将代码库复制到本地,然后在本地进行修改和提交,最后再将修改后的代码推送到远程仓库。
Git的版本管理原理可以分为三个部分:工作区、暂存区和版本库。
工作区是指开发者在本地电脑上进行代码修改的地方,也就是我们平时所说的代码目录。
在工作区中,我们可以添加、修改和删除文件,这些操作都是在本地进行的,不会影响到远程仓库。
暂存区是指在提交代码之前,我们需要将修改的文件添加到暂存区,这样才能将修改后的代码提交到版本库。
暂存区的作用是将修改的文件进行分类,方便我们进行版本控制。
在暂存区中,我们可以查看修改的文件,也可以将文件从暂存区中删除。
版本库是指存储代码历史记录的地方,也就是我们所说的Git仓库。
在版本库中,我们可以查看代码的历史记录,包括每次提交的修改内容、提交时间、提交人等信息。
版本库中的代码是经过审核和测试后才能被合并到主分支中的,这样可以保证代码的质量和稳定性。
Git的版本管理原理可以帮助我们更好地管理代码,避免代码冲突和丢失。
通过Git的版本管理原理,我们可以轻松地回滚代码、查看代码历史记录、合并代码等操作,提高了代码的可维护性和可靠性。
同时,Git的分布式版本控制系统也可以让多个开发者同时进行
代码开发,避免了代码冲突和重复开发的问题。
Git的版本管理原理是非常重要的,它可以帮助我们更好地管理代码,提高代码的质量和稳定性。
无论是个人开发还是团队协作,都可以通过Git的版本管理原理来提高代码的效率和质量。
TortoiseGit入门教程—-参考资料:TortoiseGit帮助文档边城浪子二O一七年元月二十日目录1、关于版本控制 (3)2、TortoiseGit安装: (3)2、TortoiseGit文件夹图标说明: (9)3、克隆远程库 (10)4、对文件进行修改 (13)5、提交更改。
(14)6、push推送变更到库 (18)7、从远程库更新 (19)8、与远程库同步 (20)9、解决冲突 (24)10、TortoiseGitMegar (28)11、查看本地文件与基础文件的差异 (31)12、查看别人的修改 (37)13、查看文件的所有修改者 (40)14、导出某一版本的文件 (41)15、慎用Clean Up (44)16、.gitignore和不需提交的文件 (45)17、附:删除windows凭据 (46)1、关于版本控制版本控制是管理信息修改的艺术,它一直是程序员最重要的工具,程序员经常会花时间作出小的修改,然后又在某一天取消了这些修改,想象一下一个开发者并行工作的团队 - 或许是同时工作在同一个文件!- 你就会明白为什么一个好的系统需要管理潜在的混乱。
这是来自TortoiseSVN文档的一段话,总结得很精辟.TortoiseGit 是一个 Windows 下的版本控制系统Git的客户端工具,正如其名字一样,小乌龟外面有一个壳,TortoiseGit也只是Git一个壳,使您更加方便的使用Git.Git是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理.版本库就像一个常见的文件服务器,除了它保存你对文件和目录所有的改变。
这一特性使得你可以恢复文件的旧版本并查看历史—谁在什么时间如何进行的修改。
因此也可以说版本控制系统是一种“时间机器”。
TortoiseGit现在有多语言包可以下载,本文档使用英文版进行说明.本文档是以个人经验参考官方文档整理出来的,可能会存在很多问题,如有理解不正确的地方希望能够指出,大家共同学习吧。
Git学习笔记之(⼆)Gitbash命令介绍打开 git bash 界⾯,在该界⾯进⾏命令操作。
在你的本地⼯程根⽬录下右键打开 git bash 命令⼯具。
1、git -- help输出命令该命令,回车,可以看到所有git 命令,其也介绍了对应⽤法。
2、git log可以查看该⼯程最新提交的记录。
3、 git diff可以查看本地该⼯程与github该⼯程之间的差异性红⾊表⽰冲突点。
绿⾊表⽰表⽰新增点。
4、git commit(1) 初次提交某个⽂件⾄远程仓库(这⾥均是指同步⾄ GitHub上,以修改了根⽬录下的pom.xml为例)。
a) git commit -i pom.xml -m "修改pom中的依赖数据"该命令表⽰将 pom.xml 提交到本地仓库中,提交的 message为 "修改pom中的依赖数据",其中 -m "message",这个在提交的时候必须写的。
-i xxxx 表⽰提交某个⽂件。
此时回车,出现了如下情况:提⽰需要配置提交账号。
b) git config --gobal "accountname"该命令表⽰配置git的账号名;c) git config --gobal user.email "accoutemail"该命令表⽰配置git的邮箱;d) git commit --amend --reset-author该命令表⽰重置⽤户信息在输⼊ d) 的命令之后,直接进⼊了编辑器⾥⾯,在该编辑器⾥⾯会提⽰本次要提交什么样的内容,同时要求输⼊提交的message。
此时直接输⼊message,之后按 esc 键退出输⼊状态,并按ZZ 返回命令⾏。
命令⾏呈现如下状态;e) git push origin 分⽀名该命令表⽰提交到远程仓库中(2) 本次修改的内容同步⾄远程仓库本地有新增⽂件,需上传⾄远程仓库,先执⾏如下命令:git add ⽂件若是在⼯程⽬录下启动 git bash⼯具的话,这⾥的⽂件填写的路径为相对⼯程⽬录的路径;可以填写多个⽤空格隔开,如:git add 1.txt 2.txtgit commit -i ⽂件 -m "备注"将⽂件提交到本地仓库中, -i 命令表⽰特定的⼏个⽂件,多个⽂件⽤空格隔开,如: git commit -i 1.txt 2.txt -m "提交修改的⽂件"git push 远程服务器分⽀名称将修改的⽂件提交到远程服务器,如: git push origin master 将变更的内容提交到 git 上的主⼲上5、以下是从⽹上找到的命令还未经验证,并实际操作理解⽤途git Bash here从远程仓库更新代码到本地以及上传代码到远程仓库第⼀步:创建分⽀⾸先先在云平台或者github上⾯创建⼀个你的分⽀,⽐如叫做dev-ts-whitelist,第⼀次平台会⾃动帮你从master(主⼲)⾥⾯把代码同步到dev-ts-whitelist分⽀⾥⾯。
git message 语法-概述说明以及解释1.引言1.1 概述概述部分内容:引言部分将介绍本文的主题——"git message 语法"。
Git是一种分布式版本控制系统,它允许多人协同开发,并保留了每一个版本的更改记录。
在使用Git进行版本控制时,我们不仅需要关注代码的改动,还要注意良好的提交信息。
Git message(提交信息)是每次代码提交时,对所做更改的简短描述。
良好的Git message具有重要的意义。
首先,它可以使团队成员更清晰地了解自己以及他人所做的更改,避免项目中被遗忘的改动。
其次,良好的Git message可以提高代码的可读性,便于他人对代码进行理解和维护。
此外,当出现问题需要回溯历史版本时,清晰的Git message可以帮助我们快速定位出错地点和原因。
本文将介绍Git message的常用语法规则,包括合理的提交主题、提交内容的格式要求以及对应的时间戳格式等。
我们将详细探讨每个规则的用途和意义,并给出一些写好Git message的建议和提示。
通过学习和遵守这些语法规则,我们可以提高代码版本控制的效率和代码的可维护性。
总之,良好的Git message语法对于团队协作和项目的管理非常重要。
接下来的文章将深入探讨Git message语法规则以及其重要性,并为大家提供一些写好Git message的实用建议。
通过学习和遵循这些规则,我们可以提高我们的代码版本控制能力,提升团队合作效率和项目质量。
1.2 文章结构文章结构部分的内容如下:文章结构是指整篇文章的组织框架和布局,它决定了文章的逻辑顺序和信息的层次性。
一个合理的文章结构可以使读者更好地理解文章的内容,并能更快地获取所需信息。
通常,一篇文章的结构包括引言、正文和结论三个主要部分。
在引言部分,我们会对文章的主题进行概述,并介绍文章的目的和意义。
这部分内容的目的是引起读者的兴趣并让读者了解文章的背景信息。
git 的常见操作
以下是git的常见操作:
1. 初始化仓库:使用`git init`命令在当前目录创建一个新的git
仓库。
2. 克隆仓库:使用`git clone`命令克隆一个远程仓库到本地。
3. 添加文件:使用`git add`命令将文件添加到暂存区。
4. 提交更改:使用`git commit`命令将暂存区的更改提交到本
地仓库。
5. 查看仓库状态:使用`git status`命令查看仓库中文件的状态。
6. 查看提交历史:使用`git log`命令查看仓库的提交历史。
7. 创建分支:使用`git branch`命令创建一个新的分支。
8. 切换分支:使用`git checkout`命令切换到另一个分支。
9. 合并分支:使用`git merge`命令将一个分支的更改合并到当
前分支。
10. 拉取远程更新:使用`git pull`命令从远程仓库拉取最新的
更新。
11. 推送更新:使用`git push`命令将本地仓库的更新推送到远
程仓库。
12. 忽略文件:使用`.gitignore`文件来指定要忽略的文件和目录。
13. 撤销更改:使用`git revert`或`git reset`命令撤销之前的提交
或更改。
14. 重置HEAD指针:使用`git reset`命令将HEAD指针移动到
另一个提交。
15. 标签管理:使用`git tag`命令创建、列出和删除标签。
这只是git的一小部分常见操作,git还有很多其他功能和命令可供使用。
git 存储原理
Git存储原理是指在Git版本控制系统中,数据是如何存储的。
Git采用了分布式版本控制系统,每个开发者都可以在本地进行代码提交和管理,而不会影响到其他开发者。
Git存储原理是Git 的核心部分,它包括:
1. Git存储的对象
在Git中,所有数据都被存储为对象。
这些对象包括文件和目录,以及Git中的提交、标签和分支等。
每个对象都有一个唯一的SHA-1哈希值,用于确保对象的完整性和唯一性。
2. Git的三种对象类型
Git的对象可以分为三种类型:blob、tree和commit。
Blob对象用来存储文件内容,Tree对象用来存储目录结构,Commit对象则是对文件和目录的一次快照。
每个提交都是一个Commit对象。
3. Git的存储结构
Git的存储结构采用了类似于“数据库”的方式,即将所有对象存储在一个对象库中。
对象库包含了所有Git对象的内容和元数据。
Git对象库中的对象都是不可修改的,因此可以确保系统的完整性和稳定性。
4. Git的压缩机制
为了减小Git对象库的大小,Git采用了一种称为“Delta压缩”的机制。
Delta压缩是指将新对象和旧对象之间的差异进行压缩,从而实现对象的高效存储和传输。
总之,Git存储原理是Git版本控制系统的核心部分,通过分布式存储和Delta压缩等技术,实现了高效的数据存储和管理。
这些技术为Git的高效性和稳定性提供了重要的支持。
git的原理一、概述Git是一个分布式版本控制系统,它可以记录文件的历史变化,并且可以多人协作开发。
Git最初由Linus Torvalds于2005年开发,目的是为了管理Linux内核的源代码。
随着时间的推移,Git已成为最流行的版本控制系统之一。
二、Git的基本原理1. Git的数据模型Git将文件存储为快照(snapshot),而不是将文件存储为差异(differences)。
每次提交(commit)时,Git会记录所有文件的状态,并生成一个指向该快照的指针(commit object)。
这种方式使得Git非常高效,并且可以轻松地进行分支操作。
2. Git的三个区域在使用Git时,有三个重要区域:工作区(working directory)、暂存区(staging area)和仓库(repository)。
- 工作区:即我们平常所说的项目目录,包含所有文件和子目录。
- 暂存区:也称为索引(index),它是一个中间层,用于暂存所有修改过的文件和目录。
- 仓库:即.git目录,它保存了项目历史记录和元数据。
3. Git对象在Git中,有四种类型的对象:- Blob对象:表示一个文件内容。
- Tree对象:表示一个目录结构。
- Commit对象:表示一次提交操作。
- Tag对象:表示一个标签,可以用于给某个提交打上标记。
这些对象都有唯一的SHA-1哈希值,并且可以通过哈希值来访问它们。
4. Git的分支在Git中,分支是一个指向某个提交的指针。
默认情况下,Git会创建一个名为“master”的分支,它指向最新的提交。
当我们创建新的提交时,Git会自动更新“master”分支指向新的提交。
5. Git的合并在Git中,合并(merge)是将两个或多个分支合并成一个新的分支。
当两个分支有不同的修改时,Git会尝试自动合并这些修改。
如果无法自动合并,则需要手动解决冲突。
三、Git工作流程1. 初始化仓库使用“git init”命令可以将当前目录初始化为一个Git仓库。
Git的原理简介和常⽤命令Git和SVN是我们最常⽤的版本控制系(Version Control System, VCS),当然,除了这⼆者之外还有许多其他的VCS,例如早期的CVS 等。
顾名思义,版本控制系统主要就是控制、协调各个版本的⽂档内容的⼀致性,这些⽂档包括但不限于代码⽂件、图⽚⽂件等等。
早期SVN占据了绝⼤部分市场,⽽后来随着Git的出现,越来越多的⼈选择将它作为版本控制⼯具,社区也越来越强⼤。
相较于SVN,最核⼼的区别是Git是分布式的VCS,简⽽⾔之,每⼀个你pull下来的Git仓库都是主仓库的⼀个分布式版本,仓库的内容完全⼀样,⽽SVN则不然,它需要⼀个中央版本库来进⾏集中控制。
采⽤分布式模式的好处便是你不再依赖于⽹络,当有更改需要提交的时候⽽你⼜⽆法连接⽹络时,你只需要把更改提交到本地的Git仓库,最后有⽹络的时候再把本地仓库和远程的主仓库进⾏同步即可。
当然,分布式和⾮分布式各有各的优缺点,但是⽬前来看,分布式的Git正逐渐被越来越多的⼈所接受并推⼴。
本⽂主要对Git的基本原理和常⽤命令进⾏简介,试图从底层来说明Git是如何⼯作的,从⽽帮助⼤家理解上层命令在执⾏的时候背后所产⽣的动作和变化。
原理部分的内容可以参考做进⼀步的了解,⽽常⽤的命令可以参考其他的资料。
本⽂的总结根据⾃⼰的理解进⾏描述,如果错误,请不吝赐教。
Git的基本原理本质上,Git是⼀套内容寻址(content-addressable)⽂件系统,⽽和我们直接接触的Git界⾯,只不过是封装在其之上的⼀个应⽤层。
这个关系颇有点类似于计算机⽹络中应⽤层和下属层的关系。
在Git中,那些和应⽤层相关的命令(也就是我们最常⽤的命令,如git commit、 git push等),我们称之为porcelain命令(瓷器之意,意为成品、⾼级命令);⽽和底层相关的命令(⼏乎不会在⽇常中使⽤,如git hash-object、git update-index等),则称之为plumbing命令(管道之意,是连接git应⽤界⾯和git底层实现的⼀个管道,类似于shell,底层命令)。
本节先简单介绍Git的使用与操作, 然后再介绍TortoiseGit 的使用与操作.Git是SVN以后的新一代的版本控制系统/协议. 适合于大规模的开源软件多人协作的开发. 有一个总仓库(如GitHub,CSDN,OSchina等提供), 每个客户端都有一个本地仓库(这个本地仓库有点对应于SVN的服务端仓库), 以及一个可以看见的本地项目.让我们想想,至少需要有哪些功能.以GitHub为例,首先,必须得有一个线上仓库(Repository), 这首先得新建一个仓库.要创建仓库,必须得先注册账号. 请参考: 创建GitHub技术博客全攻略:/renfufei/article/details/37725057然后,登录GitHub, 在右上角找到New Repository 或者加号下拉按钮(+),点击进入新建仓库页面: https:///new, 如下图所示:依次填写仓库名,以及其他信息后,点击"Create repository" 按钮,即可创建一个在线仓库. 因为这个仓库是挂在你的账号下的,所以可以是任意合法的字符,只要和你的其他仓库不冲突即可.仓库创建成功后,就会进入仓库预览页面, 如下图所示:然后,我们可以点击右边的HTTPS 链接, 上方的文本框里面就显示了HTTPS 协议下的仓库访问地址, 可以点进去,全选,也可以点击右边的复制按钮复制到剪贴板. 例如,刚刚创建的项目访问路径是:https:///cncounter/LispGentleIntro.git是一个以https:// 开始,以 .git 结尾的URL,根据提示,叫做clone URL.好了,仓库创建完成,可以进入下一步了.如果你偏爱命令行,那么可以简单参考下这一小节. 否则,请往下翻,直接看TortoiseGit使用与操作2.1 克隆项目(clone ...)Win+R 快捷键打开运行对话框,输入cmd回车, 在cmd 中(其实在GitBash中也可以), cd 切换到存放git项目的目录, 如:[plain]view plain copy1.Microsoft Windows [版本 6.1.7601]2.版权所有 (c) 2009 Microsoft Corporation。
保留所有权利。
3.4.C:\Users\Administrator>F:5.6.F:\>cd GIT_ALL然后执行命令: git clone https:///cncounter/LispGentleIntro.git ,就会把项目克隆到当前目录下, 项目的目录名字默认为 LispGentleIntro.[plain]view plain copy1.F:\GIT_ALL>git clone https:///cncounter/LispGentleIntro.git2.Cloning into 'LispGentleIntro'...3.remote: Counting objects: 5, done.4.remote: Compressing objects: 100% (4/4), done.5.remote: Total 5 (delta 0), reused 0 (delta 0)6.Unpacking objects: 100% (5/5), done.7.Checking connectivity... done.命令行截图如下:2.2 提交项目(commit ...)然后可以cd切换到LispGentleIntro 目录, 新增或者修改某些文件.这里只是模拟一下操作. 实际情况可能是使用Eclipse 导入项目(不要拷贝,Copy...)进行一些编辑, 然后将当前目录下的所有有变动的文件告诉索引库,接着提交到本地仓库.[plain]view plain copy1.F:\GIT_ALL>cd LispGentleIntro2.3.F:\GIT_ALL\LispGentleIntro>echo some content >> cncounter.txt4.5.F:\GIT_ALL\LispGentleIntro>echo by cncounter >> README.md6.7.F:\GIT_ALL\LispGentleIntro>git add .8.9.F:\GIT_ALL\LispGentleIntro>git commit -m "add some info."10.[master 86d090f] add some info.11. 2 files changed, 4 insertions(+)12. create mode 100644 cncounter.txt提交到本地仓库有什么好处呢? 本地仓库就是一个版本管理库,我们在编写代码时,如果写错了,那么可能需要Ctrl+Z 来撤销,撤销撤销,如果很多,而且跨文件,就很麻烦,可能需要Copy文件什么的。
这时候本地仓库就很有用了. 修改到某个阶段,然后就提交到本地仓库. 可以有效防止丢失,方便回退. 而且,提交到本地仓库不会影响别人看到的内容(只有本机可见).2.3 推送项目(push ...)如果完成到一定程度,那么可以推送到远端在线仓库. 推送之前,请确保你已经设置了全局的和user.email, 如果没有设置,或者不想使用全局的信息,可以在当前项目下设置:[plain]view plain copy1.F:\GIT_ALL\LispGentleIntro>git config "renfufei"2.3.F:\GIT_ALL\LispGentleIntro>git config user.email "renfufei@"接着,可以执行推送(push), 推送就是将已经提交到本地仓库的那部分内容给推到远端在线仓库.(修改了,但没提交的那部分内容,不会被推送). 执行git push命令即可:[plain]view plain copy1.F:\GIT_ALL\LispGentleIntro>git pushername for 'https://': renfufei3.Password for 'https://renfufei@':4.Counting objects: 6, done.5.Delta compression using up to 8 threads.pressing objects: 100% (3/3), done.7.Writing objects: 100% (4/4), 402 bytes | 0 bytes/s, done.8.Total 4 (delta 1), reused 0 (delta 0)9.To https:///cncounter/LispGentleIntro.git10. e8c0fb1..6407079 master -> master在连接上远端服务器之后,会要求你输入用户名与密码. 其中,用户名是你注册GitHub时的账号,不是邮箱. 接着是密码,注意密码是没有回显的,也就是为了安全,不告诉你具体输入了几个字符,输入完成回车即可. 截图如下:好了,推送完成,这时候用浏览器打开在线仓库,看看内容是不是已经变了?2.4 拉取项目(pull ...)当然,如果多人协作, 或者多个客户端进行修改, 那么我们还要拉取(Pull ... )别人推送到在线仓库的内容下来。
大神们是不推荐使用pull 命令进行拉取的, 因为封装了细节(git pull == git fetch + git merge). 对于这群更喜欢用命令行的神们来说, 一切在掌控之中是一种强迫症!!!(开个玩笑, 其实项目成员复杂,约定不好以后, pull 确实会有很多问题,会坑人.)常规使用,我们执行git pull即可:[plain]view plain copy1.F:\GIT_ALL\LispGentleIntro>git pull2.Already up-to-date.当然,因为没有其他文件被修改,所以直接提示已经更新到最新. 常规操作就这些,需要注意的是,和使用SVN的好习惯一样,你在修改本地内容之前,最好先pull 一下,减少冲突的可能.使用Git命令有时候确实不怎么方便,特别是每次都要输入密码,如果配置SSH 的方式,又实在是很麻烦.(当然,必须使用Windows 神器才有方便友好的客户端图形界面啦!!!)安装tortoiseGit之前,我们需要先安装程序包,然后安装语言包(LanguagePack). 因为TortoiseGit 只是一个程序壳,必须依赖一个Git Core,也就是上一节我们安装的Git.Git安装与配置下载Git安装包0.TortoiseGit-1.8中文版与Git安装包: /download/renfufei/82046991.首先打开Git 的官方网站: /2.然后找到下载页面: /downloads3.找到Windows版本的下载页面: /download/win4.因为准备使用TortoiseGit做图形客户端,所以就不选择Git GUI 版本. 打开Windows的下载页面后,应该会自动弹出下载框,选择保存即可. 如果没有弹出,可以右键点击页面中的click here to download manually.,选择另存为即可.5.建议将下载好的软件安装包统一分类放到某个目录,如: E:\SOFT_N\Tools_ALL\Git_ALL, 方便以后查找使用.6.文件通过浏览器下载完成后,需要修改文件的锁定属性,特别是.zip文件和.chm文件(否则打开chm会显示404). 右键点击下载的文件,选择属性,然后点击"解除锁定"按钮,确定即可. 如下图所示:去除文件锁定(非必须)7.然后鼠标双击安装文件, 如果有Windows拦截警告,允许即可8.然后出现安装向导界面,点击下一步(Next)即可:安装向导界面9.接着出现授权信息界面,Next即可:授权信息界面10.选择安装路径11.选择文件关联,如果你不清楚,直接默认,下一步即可. 如果你想要右键菜单清爽一点,就把下图中的那个勾给去掉. 这里把所有勾去掉也是可以的,更清爽(我就是这么干的).12.接着出现开始菜单文件夹,默认,下一步即可:13.然后是是否配置Path的配置,选择中间一个,可以通过Windows命令行(CMD)调用git 命令。