【git笔记】基础
版本控制系统分类
- 集中式(svn)
集中式只有代码服务器保存代码的历史信息,客户机不保存历史信息,所以提交必须依赖网络 - 分布式(git)
分布式是不仅代码服务器有代码的历史记录,每个客户端也都保存完整的历史信息,相比集中式版本控制可以避免单点故障。可以在本地提交,不需要依赖网络
签名:<必须配置>
用于区分不同开发人员的身份,必须设置签名,签名与远程仓托管中心的用户名无关,系统级别的用户名和邮箱存储在~/.gitconfig
文件中;项目级别的签名存放在.git/config
文件中;
命令:
git config -l -- 查看git配置
git config --global user.name fan -- 设置用户名,用户级别(如果不加--global,代表配置是项目级别)
git config --global user.email 410577910@qq.com -- 设置密码,用户级别
选项:
--local --项目级别
--global --用户级别
--system --系统级别
.gitignore
*.sh --排除所有.sh结尾的文件
!a.sh --a.sh除外
files/ --排除files目录下的所有文件
*.py[a|b|c] --排除.pya、.pyb、.pyc结尾的文件
免密登录的三种方式
- 将用户名密码放在git url中
原地址:https://github.com/fan/db.git
git remote add origin https://用户名:密码@github.com/fan/db.git #将用户名和密码放在url里,可以免密登录 - ssh
- git自动管理凭证
ssh登录,生成密钥对
鼠标右键->gitbash 打开控制台
控制台中输入ssh-keygen -t rsa 生成密钥对,密钥对文件生成到c:\users\administrator.ssh文件夹下
给开源项目贡献代码
1、fork代码
2、在自己fork的项目中修改代码
3、给开源项目的作者提交申请(pull request)
本地仓库与远程仓关联
先有远程仓:直接克隆到本机,自动关联
git clone git@github.com:xxxx/xxxx.git
先有本地仓:将已有的本地仓库与GitHub仓关联
git remote add origin git@github.com:xxxx/xxxx.git
git push -u origin master -- 将当前分支推送到远程,第一次推送加-u,git会把本地master分支与远程master分支关联起来,以后推送拉取可以简化命令
先有本地仓,方式2:
git remote add origin git@github.com:xxxx/xxxx.git
git fetch --将版本库拉到本地
git checkout -b master origin/master --本地仓的master与远程master关联,关联后推送、拉取可简化
先有本地仓,且本地仓有文件
git remote add web2 https://gitee.com/fanwenjian/web2.git
git pull web2 master(如果远程仓有文件,此时会有两个tree,需要merge)
git merge --allow-unrelated-histories web2/master(merge后新commit继承自两个tree)
工作区、暂存区、本地仓
- 工作区
就是你在电脑里能看到的目录 - 版本库(Repository)
工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。
暂存区:
工作流
- 集中式工作流
如果你的开发团队成员已经很熟悉 Subversion,集中式工作流让你无需去适应一个全新流程就可以体验 Git 带来的收益。这个工作流也可以作为向更 Git 风格工作流迁移的友好过渡。 - 功能分支工作流
功能分支工作流以集中式工作流为基础,不同的是为各个新功能分配一个专门的分支来开发。 - GitFlow工作流
GitFlow 工作流通过为功能开发、发布准备和维护分配独立的分支,让发布迭代过程更流畅。严格的分支模型也为大型项目提供了一些非常必要的结构。 - Forking工作流
Forking 工作流是分布式工作流,充分利用了 Git 在分支和克隆上的优势。可以安全可靠地管理大团队的开发者(developer),并能接受不信任贡献者(contributor)的提交。 - Pull Requests
Pull requests 让开发者更方便地进行协作的功能,提供了友好的 Web 界面可以在提议的修改合并到正式项目之前对修改进行讨论。