Git命令总结及问题解决
2019-06-15-Git
前言
- 关于
/etc/profile 、 /etc/bashrc 与 ~/.bashrc、~/.bash_profile1
2/etc/profile # 用于系统变量
# 该文件为系统的每个用户设置环境变量信息, 当用户第一次登录时, 该文件被执行, 并从/etc/profile.d目录的配置文件中搜集shell的设置1
2/etc/bashrc # 用于保存bash信息
# 为每个运行bash shell的用户执行此文件, 当bash shell 被打开, 该文件被读取1
2~/.bashrc
# 该文件包含专用于你的bash shell 的bash信息, 当登录时以及每次打开新的shell时, 该文件被读取1
2~/.bash_profile
# 每个用户都可使用该文件输入专用于自己使用的shell信息, 当用户登录时, 该文件仅仅执行一次, 默认情况下, 设置一些环境变量, 执行用户的.bashrc文件
Git 简介
1.1 Git的历史:
Linus torvalds 在1991年时发布了Linux操作系统,从那以后Linux系统便不断发展壮大,但因为不断有无数的开源爱好者提供源码,而Linus torvalds每次都是手动合入相关代码。一直到2002年,Linux系统经过十余年的不断发展,代码库已经庞大到无法再通过手工的方式管理了,但是Linus真的很不喜欢类似于 CVS或者Subversion 的一些版本控制系统,于是商业公司BitMover决定将其公司的BitKeeper分布式版本控制系统授权给Linux开发社区来免费使用,当时的BitKeeper可以比较文件内容的不同,还能够将出错的文档还原到历史某个状态,Linus终于放下了心里的石头。就这样平静的度过了三年时间,但是Linux社区聚集着太多的黑客人物,2005年时,那位曾经开发Samba服务程序的Andrew因为试图破解BitKeeper软件协议而激怒了BitMover公司,当即决定不再向Linux社区提供免费的软件授权了,此时的Linus其实也早已有自己编写分布式版本控制系统的打算了,于是便用C语言创建了Git分布式版本控制系统,并上传了Linux系统的源代码。
CVS/SVN:集中式的版本控制系统 – 版本库是集中存放在中央服务器,工作时用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器。中央服务器就好比是一个图书馆,你要改一本书,必须先从图书馆借出来,然后回到家自己改,改完了,再放回图书馆。集中式版本控制系统最大的毛病就是必须联网才能工作;
- Git:分布式的版本控制系统 – 布式版本控制系统根本没有“中央服务器”,每个人的电脑上都是一个完整的版本库,工作时不需要联网。
Git的原理:
- 本地工作目录:在工作目录中修改数据文件。
- 暂存区域(stage/index):将文件的快照放入暂存区域, 一般存放在
.git目录下的index(.git/index)文件中 - Git数据库:将暂存区域的文件快照提交到Git仓库中。
- 文件上传至Git暂存区
- 文件上传至Git版本仓库
Git 基本使用操作
Git 的安装与配置命令:
1 | |
Git 初始化仓库命令:
1 | |
Git 代码提交命令:
1 | |
Git 查看信息命令:
1 | |
Git 分支命令
1 | |
Git 标签命令
1 | |
Git 远程同步命令
1 | |
Git 撤销命令
1 | |
Git 进阶操作(平时使用遇到问题总结)
1、2019-05-14 出现Failed to connect to github.com port 443: Timed out:
原因:
- 本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,ssh 阻塞了22端口,需要配置验证信息;
解决问题方法:
ssh-keygen -t rsa -C "youremail@example.com"一路回车,生成公钥/私钥于当前用户的.ssh目录;- 将此目录下的
id_rsa.pub里的内容复制到远端的git配置中(ssh),在.ssh目录中新建config文件,将如下复制其中:
1
2
3
4
5
6Host github.com
User git
Hostname ssh.github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa
Port 443- 测试连接是否通畅:
1
2ssh -T git@github.com 或者 ssh -V git@github.com
Hi anyue-1993! You've successfully authenticated, but GitHub does not provide shell access
2、2019-5-17 fork 后所要进行的操作
1 | |
3. 2019-5-18 git 设置别名的操作
1 | |
4. git 出现 fatal: refusing to merge unrelated histories 错误
- 原因:
- 其实这个问题是因为 两个 根本不相干的 git 库, 一个是本地库, 一个是远端库, 然后本地要去推送到远端, 远端觉得这个本地库跟自己不相干, 所以告知无法合并.
- 解决方法:
git pull origin master --allow-unrelated-histories
5. 2019-8-14 已存在的项目如何git
到github创建新仓库
cd到已存在项目的目录,
1
2
3git init
git add .
git commit -m "Initial commit"如下操作:
1
2
3
4
5
6git remote add origin Your's Repo # 若fatal: remote origin already exits
git remote rm origin
git push -u origin master # 失败执行
git pull --rebase origin master # 执行 push, 若不能pull代码, 执行
git branch --set-upstream master origin/master
6. 关于 git checkout
- 作用:
- 切换分支或恢复工作树文件
1
2
3
4
5
6
7
8
9
10git branch newbranch # 创建
git checkout newbranch # 切换
git checkout -b newbranch # 综合
$ cat .git/HEAD # HEAD永远指向当前分支名
ref: refs/heads/hexo
# 恢复暂存区的指定文件到工作区
git checkout [file]
7. 关于git create mode 100644
1 | |
8. SVN
- 初始化repo:
svnadmin create E:\SVN - 修改配置文件(conf):
E:\SVN\confsvnserve.conf:1
2
3
4anon-access = read
auth-access = write
password-db = passwd
authz-db = authzauthz1
2
3
4
5
6
7[/]
anyu967 = rw
# [/foo/bar]
anyu967 =rw
* =
# [repository:/baz/fuz]
* =passwd1
2
3
4[users]
# harry = harryssecret
# sally = sallyssecret
anyu967 = 123456
- 启动SVN 服务:
svnserve -d -r E:/SVN - 流程:
checkout(初次) update--> lock--> modified--> commit
9. 关于push后文件夹显示灰色
- 删除clone后文件的
.git,.gitignore,然后重新add-commit-push git rm -r --cached FILENAME