分布式管理利器 Git 简介
集中式svn分布式git两者比较GIT是分布式的,SVN不是:这是GIT和其它非分布式的版本控制系统,例如SVN,CVS等,最核心的区别。GIT把内容按元数据方式存储,而SVN是按文件:所有的资源控制系统都是把文件的元信息隐藏在一个类似.svn,.cvs等的文件夹里。GIT分支和SVN的分支不同:分支在SVN中一点不特别,就是版本库中的另外的一个目录。GIT没有一个全局的版本号,而S
集中式 svn
分布式 git
两者比较
- GIT是分布式的,SVN不是:这是GIT和其它非分布式的版本控制系统,例如SVN,CVS等,最核心的区别。
- GIT把内容按元数据方式存储,而SVN是按文件:所有的资源控制系统都是把文件的元信息隐藏在一个类似.svn,.cvs等的文件夹里。
- GIT分支和SVN的分支不同:分支在SVN中一点不特别,就是版本库中的另外的一个目录。
- GIT没有一个全局的版本号,而SVN有:目前为止这是跟SVN相比GIT缺少的最大的一个特征。
- GIT的内容完整性要优于SVN:GIT的内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。
Git配置信息
git config –global user.name “dn-jack”
git config –global user.email 1497068090@qq.com
git config –list 查看配置信息
Git 简介
Git 工作区、暂存区和版本库
工作区:就是你在电脑里能看到的目录。
暂存区:英文叫stage, 或index。一般存放在 “.git目录下” 下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
版本库:工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
在版本库中标记为 “index” 的区域是暂存区(stage, index),标记为 “master” 的是 master 分支所代表的目录树。
图中我们可以看出此时 “HEAD” 实际是指向 master 分支的一个”游标”。
工作流程
工作区 – > 暂存区 –> 版本库 head – > 分支(可以是主分支)。
我们项目所在的空间为 “工作区”,修改后代码后,我们需要将 工作区中的代码提交到 暂存区 中(项目根目录下的 .git 文件夹),用 .git 文件夹中的 HEAD 文件中指向的 分支决定提交到那里 。
说明 :暂存区中的 HEAD 文件,暂存区中还保存着保本号等信息,他所有记录信息都是保存在 .git 文件夹中,不想svn cvs 他们是在目录下通过隐藏文件去记录,这样很耗空间。
Git 本地仓库命令
Git 创建仓库
git init
Git 使用 git init 命令来初始化一个 Git 仓库,Git 的很多命令都需要在 Git 的仓库中运行,所以 git init 是使用 Git 的第一个命令。
在执行完成 git init 命令后,Git 仓库会生成一个 .git 目录,该目录包含了资源的所有元数据,其他的项目目录保持不变(不像 SVN 会在每个子目录生成 .svn 目录,Git 只在仓库的根目录生成 .git 目录)。
使用方法
使用当前目录作为Git仓库,我们只需使它初始化。
git add filename
把文件添加到版本库
git commit –m “版本提交描述”
git commit –am ‘xxxx’ 提交到暂存区
git clone
版本克隆 git clone https://github.com/alibaba/dubbo.git dubbo
git status –s
查看版本状态
git diff
执行 git diff 来查看执行 git status 的结果的详细信息。
git reset HEAD
git reset HEAD 命令用于取消已缓存的内容。
Git 分支管理
几乎每一种版本控制系统都以某种形式支持分支。使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作。
创建分支命令:
git branch (branchname)
切换分支命令:
git checkout (branchname)
删除分支
git branch -d (branchname)
合并分支命令:
git merge
Git 查看提交历史
git log
git log –oneline 简单版本
git log –oneline –graph 查看分支情况
Git 标签
如果你达到一个重要的阶段,并希望永远记住那个特别的提交快照,你可以使用 git tag 给它打上标签。
git tag -a v1.0
git log –decorate 查看tag
追加标签
git tag -a v0.9 85fc7e7
Git回退
git reset –hard 8ff24a6803173208f3e606e32dfcf82db9ac84d8
Git分支讲解
git 存储的是 元数据,根据 “提交点来记录” 每一个提交点都可以扩展分支,可以通过命令将用户 暂存区的HEAD 中指向 分支地址,这样开发者就可以将代码提交到分支上,可以通过 git merge 来合并分支。值得一说的是 : 主分支上的提交点中 最新的提交点会同步 之前的 提交点数据,如果我们在之前的提交点开出来的分支提交了代码,那么 最新的主分支中的提交点不会拿到 他提交的代码,只能用命令合并。
Git 远程分支,Git 远程仓库(Github)
添加远程库
git remote add [shortname](名字随便起) [url](github中仓库的url)
由于你的本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以我们需要配置验证信息:ssh-keygen -t rsa -C jack@dongnaoedu.com
ls -a 查看隐藏文件
后面的 jack@dongnaoedu.com 改为你在 github 上注册的邮箱,之后会要求确认路径和输入密码,我们这使用默认的一路回车就行。成功的话会在~/下生成.ssh文件夹,进去,打开 id_rsa.pub,复制里面的 key。
回到 github 上,进入 Account => Settings(账户配置)。
项目推送到github
git push –set–upstream [shortname](名字随便起)
在输入账户密码即可
提取远程仓库
git fetch
该命令执行完后需要执行git merge ,将从远程仓库下载的数据合并到你所在的分支。
说明 : git fetch 是从远程仓库将数据下载到暂存区,git merge 是将暂存区的数据提交到 本地 分支, push 是将本地分支 同步到远程分支。说明 : eclipse中的 pull = fetch + merge 。是从 远程同步到本地,commint 是 将本地缓存区中的数据 :commit 到 本地分支 和 pull 到远程仓库 。
从远端仓库提取数据并尝试合并到当前分支:
git merge
git push (提交到远程仓库)
GitHub 简介
GitHub
watch
watch 翻译过来可以称之为观察
对于别人的项目,默认自己都处于 Not watching 的状态,当你选择 Watching,表示你以后会关注这个项目的所有动态,这个项目以后只要发生变动,如被别人提交了 pull request、被别人发起了issue等等情况,你都会在自己的个人通知中心,收到一条通知消息,如果你设置了个人邮箱,那么你的邮箱也可能收到相应的邮件。
star
star 翻译过来是星,但这个翻译没任何具体意义,这里解释为关注
或者点赞
更合适,当你点击 star,表示你喜欢这个项目或者通俗点,可以把他理解成朋友圈的点赞吧,表示对这个项目的支持。
不过相比朋友圈的点赞,github 里面会有一个列表,专门收集了你所有 star 过的项目,点击 github 个人头像,可以看到 your stars 的条目,点击就可以查看你 star 过的所有项目了
fork
当选择 fork,相当于你自己有了一份原项目的拷贝,当然这个拷贝只是针对当时的项目文件,如果后续原项目文件发生改变,你必须通过其他的方式去同步。
一般来说,我们不需要使用 fork 这个功能,除非有一些项目,可能存在 bug 或者可以继续优化的地方,你想帮助原项目作者去完善这个项目或者单纯的想在原来项目基础上己维护一个属于自己项目(比如我 fork 的 AndroidWeekly 客户端,那么你可以 fork 一份项目下来,然后自己对这个项目进行修改完善,当你觉得项目没问题了,你就可以尝试发起 pull request 给原项目作者了。然后就静静等待他的 merge 邮件通知了。
- 对于一些可能会经常发生变化的会不定期更新的好项目 多使用 watch.
- 喜欢一个项目就 star 它吧~
- 修改开源项目就使用 fork,这样你就可以在原项目的基础上,对项目进行修改提交,现在你是这个项目的主人啦~
应用篇
github 拉取项目
git clone url
eclipse 导入下载 下来的项目
右键点击项目–> Team – > Share project –> Git –> 选择创建仓库,如下图 :
此时我们项目git 版本库就创建完了,但是版本库(暂存区)中并没有数据,通过commit 将工作区的代码提交到版本库(暂存区.git文件夹)并加入版本号,继续提交到远程仓库 :
右键项目 – 》 Team –》 pull 或者 commit –>commit and push 都可以,这时候他会让我们选择 “远程仓库地址”,输入 我们github 或者 码云中的 项目地址(需要去网站手动创建),帐号密码,点击Finish ,此时我们本地仓库和远程仓库已经建立了连接,接下来通过 commit and push 或者 push to upStream 将项目推送上去即可,也可以选择 remote –> push..来选择分支,然后代码提交到远程仓库,等同于 “push to upStream ”只是操作不同。
Linux下安装git
1、首先需要安装Git,可以使用yum源在线安装:
yum install -y git
2、创建一个git用户,用来运行git服务
adduser git
3、初始化git仓库:
git init –bare learngit.git
4、对git用户赋权限
chown -R git:git learngit.git
5、创建SSH Key
ssh-keygen -t rsa -C jack@dongnaoedu.com
你需要把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可,由于这个Key也不是用于军事目的,所以也无需设置密码。
如果一切顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。
6、Git服务器打开RSA认证
然后就可以去Git服务器上添加你的公钥用来验证你的信息了。在Git服务器上首先需要将/etc/ssh/sshd_config中将RSA认证打开,即:
1.RSAAuthentication yes 2.PubkeyAuthentication yes 3.AuthorizedKeysFile .ssh/authorized_keys
这里我们可以看到公钥存放在.ssh/authorized_keys文件中。所以我们在/home/git下创建.ssh目录,然后创建authorized_keys文件,并将刚生成的公钥导入进去。
然后再次clone的时候,或者是之后push的时候,就不需要再输入密码了:
7、clone仓库
git clone git@192.168.8.34:/data/git/learngit.git
个人备忘 , 希望各位看官有所帮助
git 提交前 文件忽略 配置
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)