有关git的配置
Posted 风中驻足
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了有关git的配置相关的知识,希望对你有一定的参考价值。
git版本控制器总结
关于部分内容请参考:
https://www.cnblogs.com/smuxiaolei/p/7484678.html
git是一个版本控制器,
分布式管理:可以记录每次文件的改动,让朋友间协同编辑,不需要管理一堆类似文件
查看某次改动,只需要在软件看一眼就可以,能记录每次文件的改动
版本 用户 说明 修改日期
1 user1 增加一行内容 2014/4/10 10:22
2 user2 修改一行内容 2014/4/10 13:12
3 user3 删除几个字 2014/4/15 20:42
4 user2 增加某个内容 2014/4/20 16:32
集中管理 VS 分布式管理
1)集中管理:
集中式版本控制系统,版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,
所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器。
中央服务器就好比是一个图书馆,你要改一本书,必须先从图书馆借出来,然后回到家自己改,改完了,再放回图书馆。
缺点:
集中式版本控制系统最大的毛病就是必须联网才能工作,如果在局域网内还好,带宽够大,速度够快,
可如果在互联网上,遇到网速慢的话,可能提交一个10M~20M的文件就需要10分钟甚至更多时间,这还不得把人给急死啊
2)分布式管理
版本库就在你自己的电脑上,和集中式版本控制系统相比,分布式版本控制系统的安全性要高很多,
因为每个人电脑里都有完整的版本库,某一个人的电脑坏掉了不要紧,随便从其他人那里复制一个就可以了。
而集中式版本控制系统的中央服务器要是出了问题,所有人都没法干活了。
在实际使用分布式版本控制系统的时候,其实很少在两人之间的电脑上推送版本库的修改,
因为可能你们俩不在一个局域网内,两台电脑互相访问不了,也可能今天你的同事病了,他的电脑压根没有开机。
因此,分布式版本控制系统通常也有一台充当“中央服务器”的电脑,但这个服务器的作用仅仅是用来方便“交换”大家的修改,
没有它大家也一样干活,只是交换修改不方便而已。
为什么选择Git来控制版本,理由如下:
1)快速
2)离线工作
3)回退
4)省心
5)选择有用的代码提交
6)自由选择工作方式
7)保持工作独立
Git的安装
yum install -y git
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
创建版本库
版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,
每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。
第一步:创建一个仓库目录
mkdir git_test
cd git_test/
第二步:通过git init 命令把这个目录变成git可以管理的仓库
git init
初始化空的 Git 版本库于 /git_test/.git/
ls -al
drwxr-xr-x 3 root root 4096 5月 10 13:53 .
drwxr-xr-x. 19 root root 4096 5月 10 13:50 ..
drwxr-xr-x 7 root root 4096 5月 10 13:53 .git
Git就把仓库建好了,而且告诉你是一个空的仓库(empty Git repository),细心的读者可以发现当前目录下多了
一个.git的目录,这个目录是Git来跟踪管理版本库的,没事千万不要手动修改这个目录里面的文件,不然改乱了,
就把Git仓库给破坏了。也不一定必须在空目录下创建Git仓库,选择一个已经有东西的目录也是可以的。
第三步:把文件添加到版本库
cat readme.txt
Git is veryt good tool
auth :cgt
一定要放到git_test目录下面,子目录也可以,放到其他地方git找不到文件。
把一个文件放到Git仓库只需要两步。
1)用命令git add告诉git,把文件添加到仓库
[root@master-node git_test]# git add readme.txt
执行上面的命令,没有任何的显示就对了。Linux的哲学思想:没有消息就是最好的消息,说明添加成功。
2)用命令git commit告诉git,把文件提交到仓库
[root@master-node git_test]# git commit -m "cgt write a readme file"
[master(根提交) 87818f5] cgt write a readme file
1 file changed, 2 insertions(+)
create mode 100644 readme.txt
简单解释一下git commit命令,-m后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。
嫌麻烦不想输入-m "xxx"行不行?确实有办法可以这么干,但是强烈不建议你这么干,因为输入说明对自己对别人阅读都很重要。实在不想输入说明的童鞋请自行Google,我不告诉你这个参数。
git commit命令执行成功后会告诉你,1个文件被改动(我们新添加的readme.txt文件),插入了两行内容(readme.txt有两行内容)。
为什么Git添加文件需要add,commit一共两步呢?因为commit可以一次提交很多文件,所以你可以多次add不同的文件,比如:
[root@master-node git_test]# touch file1 file2 file3
[root@master-node git_test]# ls
file1 file2 file3 readme.txt
[root@master-node git_test]# git add file1 file2 file3
[root@master-node git_test]# git commit -m "add 3 files"
[master 827526e] add 3 files
3 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 file1
create mode 100644 file2
create mode 100644 file3
你的本地仓库由 git 维护的三棵"树"组成。第一个是你的 工作目录,它持有实际文件;第二个是 暂存区(staging),它像个缓存区域,临时保存你的改动;最后是 HEAD,它指向你最后一次提交的结果。
你可以提出更改(把它们添加到暂存区),使用如下命令:
git add <filename>
git add *
这是 git 基本工作流程的第一步;使用如下命令以实际提交改动:
git commit -m "代码提交信息"
现在,你的改动已经提交到了 HEAD,但是还没到你的远端仓库。
回滚
cat readme.txt
Git is veryt good tool
auth :cgt
date:2016-5-10
执行git status
[root@master-node git_test]# git status
# 位于分支 master
# 尚未暂存以备提交的变更:
# (使用 "git add <file>..." 更新要提交的内容)
# (使用 "git checkout -- <file>..." 丢弃工作区的改动)
#
# 修改: readme.txt
#
修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
git status命令可以让我们时刻掌握仓库当前的状态,上面的命令告诉我们,readme.txt被修改过了,但还没有准备提交的修改。
虽然Git告诉我们readme.txt被修改了,但如果能看看具体修改了什么内容,自然是很好的。比如你第二天上班时,已经记不清上次怎么修改的readme.txt,所以,需要用git diff这个命令看看,然后add之后在看一下status,是显示要commit的文件,现在再回想一下那个工作流图
[root@master-node git_test]# git diff
diff --git a/readme.txt b/readme.txt
index b7cffdb..43b7253 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,2 +1,3 @@
Git is veryt good tool
auth :cgt
+date:2016-5-10
[root@master-node git_test]# git add readme.txt
[root@master-node git_test]# git status
# 位于分支 master
# 要提交的变更:
# (使用 "git reset HEAD <file>..." 撤出暂存区)
#
# 修改: readme.txt
接下来进行commit操作
[root@master-node git_test]# git commit -m "add date"
[master de00305] add date
1 file changed, 1 insertion(+)
提交之后,在查看status
[root@master-node git_test]# git status
# 位于分支 master
无文件要提交,干净的工作区
版本的回退
修改readme.txt文件
cat readme.txt
Git is veryt good tool
auth :cgt
date:2016-5-10
version:1
[root@master-node git_test]# git add readme.txt
[root@master-node git_test]# git commit -m "version"
[master 8b7d4ee] version
1 file changed, 1 insertion(+)
目前我们已经提交了三次,暂时你还能记住,但是在实际工作中我们是记不住的,不然要版本控制系统干什么。版本控制系统肯定有某个命令可以告诉我们历史记录,在Git中,我们用git log命令查看:
[root@master-node git_test]# git log
commit 8b7d4eebe4e03809162f8193d6b2338926896ab4
Author: caoxiaojian <1099415469@qq.com>
Date: Tue May 10 14:59:16 2016 +0800
version
commit de003058c91312f695b57f42724f826f6ef42f17
Author: caoxiaojian <1099415469@qq.com>
Date: Tue May 10 14:52:10 2016 +0800
add date
commit 827526ee243c93bfaf8f4f2f9dc22d31325cb47a
Author: caoxiaojian <1099415469@qq.com>
Date: Tue May 10 14:23:08 2016 +0800
add 3 files
commit 87818f5454a2bc41cfbeca4b923a510d11fe72ac
Author: caoxiaojian <1099415469@qq.com>
Date: Tue May 10 14:19:08 2016 +0800
cgt write a readme file
git log 显示从最近到最远的提交日志,我们可以看到四次提交,最近的一次是version,上一次是date,最早的一次是cgt write a readme file 。
如果嫌输出的信息太多,可以使用--pretty=oneline
[root@master-node git_test]# git log --pretty=oneline
8b7d4eebe4e03809162f8193d6b2338926896ab4 version
de003058c91312f695b57f42724f826f6ef42f17 add date
827526ee243c93bfaf8f4f2f9dc22d31325cb47a add 3 files
87818f5454a2bc41cfbeca4b923a510d11fe72ac cgt write a readme file
需要友情提示的是,你看到的一大串8b7d4eebe4e03809162f8193d6b2338926896ab4类似的是commit id(版本号),和SVN不一样,Git的commit id不是1,2,3……递增的数字,而是一个SHA1计算出来的一个非常大的数字,用十六进制表示,而且你看到的commit id和我的肯定不一样,以你自己的为准。为什么commit id需要用这么一大串数字表示呢?因为Git是分布式的版本控制系统,后面我们还要研究多人在同一个版本库里工作,如果大家都用1,2,3……作为版本号,那肯定就冲突了。
现在开始回滚,
准备把readme.txt回退到上一个版本,也就是“date”的那个版本,怎么做呢?
首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交3628164...882e1e0(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。
回滚,我们可以使用git reset这个命令
[root@master-node git_test]# git reset --hard HEAD^
HEAD 现在位于 de00305 add date
[root@master-node git_test]# cat readme.txt
Git is veryt good tool
auth :cgt
date:2016-5-10
可以看出,他没有version那行,说明回滚成功。
再来看git log
[root@master-node git_test]# git log
commit de003058c91312f695b57f42724f826f6ef42f17
Author: caoxiaojian <1099415469@qq.com>
Date: Tue May 10 14:52:10 2016 +0800
add date
commit 827526ee243c93bfaf8f4f2f9dc22d31325cb47a
Author: caoxiaojian <1099415469@qq.com>
Date: Tue May 10 14:23:08 2016 +0800
add 3 files
commit 87818f5454a2bc41cfbeca4b923a510d11fe72ac
Author: caoxiaojian <1099415469@qq.com>
Date: Tue May 10 14:19:08 2016 +0800
cgt write a readme file
没有了之前的version,那我要怎么才能恢复呢,回你的终端上,看看version的commit id,我们找到了:
8b7d4eebe4e03809162f8193d6b2338926896ab4 version,执行恢复。恢复的时候ID不需要写全部的。
[root@master-node git_test]# git reset --hard 8b7d4eebe4
HEAD 现在位于 8b7d4ee version
[root@master-node git_test]# cat readme.txt
Git is veryt good tool
auth :cgt
date:2016-5-10
version:1
使用git reflog,把之前的ID都显示出来
git reflog
8b7d4ee HEAD@{0}: reset: moving to 8b7d4eebe4
de00305 HEAD@{1}: reset: moving to HEAD^
8b7d4ee HEAD@{2}: commit: version
de00305 HEAD@{3}: commit: add date
827526e HEAD@{4}: commit: add 3 files
87818f5 HEAD@{5}: commit (initial): cgt write a readme file
工作区和暂存区
工作区:
就是在你的电脑里能看到的目录,比如咱们创建的git_test
版本库:
工作区中有一个隐藏目录.git(之前已经给童鞋们提到过这个文件),它不算工作区,而是git的版本库。
git的版本库里面存放了很多的东西,其中最重要的就是称为stage(index)的暂存区,
还有git为我们自动创建的第一个分支master,以及指向master的一个指针叫head。
管理修改
cat readme.txt
Git is veryt good tool
auth :cgt
date:2016-5-10
version:1
modify----------1
[root@master-node git_test]# git add readme.txt
[root@master-node git_test]# git status
# 位于分支 master
# 要提交的变更:
# (使用 "git reset HEAD <file>..." 撤出暂存区)
#
# 修改: readme.txt
#
第四步,再次编辑readme.txt,然后直接commit,再次查看status
[root@master-node git_test]# cat readme.txt
Git is veryt good tool
auth :cgt
date:2016-5-10
version:1
modify----------1
modify----------2
[root@master-node git_test]# git commit -m "modify"
[master 766baac] modify
1 file changed, 1 insertion(+)
[root@master-node git_test]# git status
# 位于分支 master
# 尚未暂存以备提交的变更:
# (使用 "git add <file>..." 更新要提交的内容)
# (使用 "git checkout -- <file>..." 丢弃工作区的改动)
#
# 修改: readme.txt
#
修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
发现第二次的修改没有commit,那是因为你没有add
提交后,用git diff HEAD -- readme.txt命令可以查看工作区和版本库里面最新版本的区别:
[root@master-node git_test]# git diff HEAD -- readme.txt
diff --git a/readme.txt b/readme.txt
index 4416460..07c12e7 100644
--- a/readme.txt
+++ b/readme.txt
@@ -3,3 +3,4 @@ auth :cgt
date:2016-5-10
version:1
modify----------1
+modify----------2
撤销修改
cat readme.txt
Git is veryt good tool
auth :cgt
date:2016-5-10
version:1
modify----------1
modify----------2
caoxiaojian is xiaojianjian
已经编辑完成,忽然发现了问题,最后一行,道出了笔者的心声。既然已经发现错误,那就很容易纠正它,你可以删除掉最后一行,手动把文件恢复到上一个版本的状态,如果用git status查看一下,
[root@master-node git_test]# git status
# 位于分支 master
# 尚未暂存以备提交的变更:
# (使用 "git add <file>..." 更新要提交的内容)
# (使用 "git checkout -- <file>..." 丢弃工作区的改动)
#
# 修改: readme.txt
#
修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
你可以发现上面提示你使用 "git checkout -- <file>..." 丢弃工作区的改动,那我们执行下
[root@master-node git_test]# git checkout -- readme.txt
[root@master-node git_test]# cat readme.txt
Git is veryt good tool
auth :cgt
date:2016-5-10
version:1
modify----------1
已经回来了。
命令git checkout -- readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:
一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
总之,就是让这个文件回到最近一次git commit或git add时的状态。
git checkout -- file命令中的--很重要,没有--,就变成了“切换到另一个分支”的命令,我们在后面的分支管理中会再次遇到git checkout命令。
刚刚咱们没有将修改提交到暂存区,那假如你提交到了呢??????你说咋整呢?????是不是吓尿了????
[root@master-node git_test]# cat readme.txt
Git is veryt good tool
auth :cgt
date:2016-5-10
version:1
modify----------1
caoxiaojian is xiaojianjian
[root@master-node git_test]# git add readme.txt
[root@master-node git_test]# git status
# 位于分支 master
# 要提交的变更:
# (使用 "git reset HEAD <file>..." 撤出暂存区)
# 修改: readme.txt
你要是聪明的话,你应该已经知道要怎么做了。。。。对是的,就是你想的那样。
[root@master-node git_test]# git reset HEAD readme.txt
重置后撤出暂存区的变更:
M readme.txt
[root@master-node git_test]# git status
# 位于分支 master
# 尚未暂存以备提交的变更:
# (使用 "git add <file>..." 更新要提交的内容)
# (使用 "git checkout -- <file>..." 丢弃工作区的改动)
#
# 修改: readme.txt
#
修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
已经退出了暂存区。你可能要问,那要是已经commit了呢??你小子胆子还真不小啊,教你一招,之前不是讲过回滚嘛
,直接回滚。不过这个也是有条件的,就是你还没有把自己的本地版本库推送到远程。Git是一个分布式版本控制,
他还有远程版本库,一旦你提交到远程版本库,那你就可以git go home
删除文件
cat test.txt
qwertyuiop[
adfghjjljh
fdgscvxz
[root@master-node git_test]# git add test.txt
[root@master-node git_test]# git commit -m "del test"
[master 63d3bf7] del test
1 file changed, 3 insertions(+)
create mode 100644 test.txt
[root@master-node git_test]# rm -rf test.txt
[root@master-node git_test]# git status
# 位于分支 master
# 尚未暂存以备提交的变更:
# (使用 "git add/rm <file>..." 更新要提交的内容)
# (使用 "git checkout -- <file>..." 丢弃工作区的改动)
#
# 修改: readme.txt
# 删除: test.txt
#
修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
现在你有两个选择,一是确实要从版本库中删除该文件,那就用命令git rm删掉,并且git commit:
[root@master-node git_test]# git rm test.txt
rm \'test.txt\'
[root@master-node git_test]# git commit -m "remove test.txt"
[master 5f04ee2] remove test.txt
1 file changed, 3 deletions(-)
delete mode 100644 test.txt
现在文件就从版本库中彻底的删除了。
命令git rm用于删除一个文件。如果一个文件已经被提交到版本库,那么你永远不用担心误删,但是要小心,你只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容。
另一种情况是删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本:
使用
git checkout -- test.txt
git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。
远程仓库
可以使用github给我们提供的服务,作为我们的一个远程仓库。但是需要做一下的设置。
由于你的本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以我们首先生成秘钥。
第1步:创建SSH Key。
在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:
ssh-keygen -t rsa -C "youremail@example.com"
你需要把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可,由于这个Key也不是用于军事目的,所以也无需设置密码。
如果一切顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。
第2步:添加公钥到你的
登陆GitHub,打开“Account settings”,“SSH Keys”页面,然后将你的key添加上。
为什么GitHub需要SSH Key呢?因为GitHub需要识别出你推送的提交确实是你推送的,而不是别人冒充的,而Git支持SSH协议,所以,GitHub只要知道了你的公钥,就可以确认只有你自己才能推送
github注册账号:
https://jingyan.baidu.com/article/4e5b3e192200e291911e2468.html
**************************************************************************************************
**************************************************************************************************
添加远程库
你原本在本地已经创建了一个Git仓库,现在又想在github上也创建一个仓库,让这两个仓库可以远程同步。这样github的仓库既可以作为备份,又可以让其他人通过该仓库来协作。
第一步:创建一个新的仓库repository
右上角有个➕,然后现在new repository
然后进入创建页面
仓库内容的提交
接下来咱们看如何使用
本地没有仓库的情况下,要先创建仓库。本例中我没有仓库,所以按照上图中的进行操作。
[root@master-node ~]# mkdir /test
[root@master-node ~]# cd /test
使用git init 创建定义仓库
[root@master-node ~]# git init
Initialized empty Git repository in /root/test/.git/
[root@master-node ~]# ls -al
total 8
drwxr-xr-x 1 cgt 197121 0 五月 16 06:11 ./
drwxr-xr-x 1 cgt 197121 0 五月 16 06:11 ../
drwxr-xr-x 1 cgt 197121 0 五月 16 06:11 .git/
在仓库中创建一个文件,然后add commit
[root@master-node ~]# echo "# test " >> README.md
[root@master-node ~]# git add README.md
warning: LF will be replaced by CRLF in README.md.
The file will have its original line endings in your working directory.
[root@master-node ~]# git commit -m "first commit"
[master (root-commit) 7eeb945] first commit
warning: LF will be replaced by CRLF in README.md.
The file will have its original line endings in your working directory.
1 file changed, 1 insertion(+)
create mode 100644 README.md
至此,提交到本地的head中。也就是本地仓库中,然后从本地仓库向远程仓库提交。
使用remote关联一个远程库,add是定义一个远程的名称,默认一般使用origin,后面跟的是远程仓库的名称
[root@master-node ~]# git remote add origin git@github.com:caoxiaojian/test.git
把本地库的内容推送到远程,实际上是将本地的当前分支master,推送到远程
[root@master-node ~]# git push -u origin master
Warning: Permanently added the RSA host key for IP address \'192.30.252.128\' to the list of known hosts.
Counting objects: 3, done.
Writing objects: 100% (3/3), 210 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@github.com:caoxiaojian/test.git
* [new branch] master -> master
Branch master set up to track remote branch master from origin.
由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
**************************************************************************************
报错一:提交push的时候报错
Username for \'https://github.com\' :Username
Password for \'https://Username@github.com\':
remote:Invalid username or password.
fatal:Authentication failed for \'https://github.com/username/repository.git/\'
报错原因:这个报错信息是自解释的,
这意味着我们正在尝试使用无效的用户名或密码。但我肯定我用的是正确的用户名和密码。在我的例子中,我在我的GitHub帐号中打开了一个双重认证(2 FA)之后,就发生了这种情况。所以我知道是什么导致了这个错误信息。
如何解决它
为了解决这个问题,我们需要做的就是创建一个GitHub的个人访问令牌,并使用它而不是我们的GitHub密码和一个双重认证代码。
Settings--------->>Developer settings------->>Personal access tokens------->>Generate new token
---------->>在token description处随便写个名字,选择repo,会使其从命令行访问存储库,可以在里面选择范围,权限等等。
到此为止,输入时候输入此处的密码就不会报错。
报错二:yum安装git时,报错
git clone https://github.com/jquery/jqu...
Cloning into \'jquery\'...
fatal: unable to access \'https://github.com/jquery/jqu...\': Peer reports incompatible or unsupported protocol version.
处理办法:yum update -y nss curl libcurl
*************************************************************************************************
*************************************************************************************************
再次修改README.md
[root@master-node ~]# echo "# this is my test file " >> README.md
[root@master-node ~]# git add README.md
warning: LF will be replaced by CRLF in README.md.
The file will have its original line endings in your working directory.
[root@master-node ~]# git commit -m "2 commit"
[master warning: LF will be replaced by CRLF in README.md.
The file will have its original line endings in your working directory.
80bc0e7] 2 commit
warning: LF will be replaced by CRLF in README.md.
The file will have its original line endings in your working directory.
1 file changed, 1 insertion(+)
[root@master-node ~]# git push origin master
Warning: Permanently added the RSA host key for IP address \'192.30.252.120\' to the list of known hosts.
Counting objects: 3, done.
Writing objects: 100% (3/3), 257 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@github.com:caoxiaojian/test.git
7eeb945..80bc0e7 master -> master
到github下面对应的仓库里查看
克隆远程库
在刚创建的仓库中创建新文件
创建文件
创建完成后可以看见你的新文件
因为之前已经创建了test这个本地仓库,所以先删除,然后再clone
[root@master-node ~]# rm -rf /test/
[root@master-node ~]# git clone git@github.com:caoxiaojian/test.git
Cloning into \'test\'...
Warning: Permanently added the RSA host key for IP address \'192.30.252.121\' to the list of known hosts.
remote: Counting objects: 9, done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 9 (delta 0), reused 6 (delta 0), pack-reused 0
Receiving objects: 100% (9/9), done.
Checking connectivity... done.
[root@master-node ~]# cd /test/
test (master)
[root@master-node ~]# ls
new_file README.md
test (master)
[root@master-node ~]# cat new_file
make a new file for clone test
****************************************************************************************************
git clone git@github.com:caoxiaojian/test.git
这条命令会报错:
Permissiondenied (publickey).
fatal:Could not read from remote repository.
Pleasemake sure you have the correct access rights
and the repository exists.
但是其实执行命令:git clone git@github.com:peiyunh/tiny.git 是没有问题的(不加--recursive参数),于是百度了一番,我理解的是原因是由于你在本地(或者服务器上)没有生成ssh key,你可以在ternimal下执行:
cd ~/.ssh ls来查看是否有文件id_rsa以及文件id_rsa.pub,(我的已经生成了,所以我ls后会显示。)
下面记录下解决办法:
1.首先,如果你没有ssh key的话,在ternimal下输入命令:ssh-keygen -t rsa -C "youremail@example.com", youremail@example.com改为自己的邮箱即可,途中会让你输入密码啥的,不需要管,一路回车即可,会生成你的ssh key。(如果重新生成的话会覆盖之前的ssh key。)
2.然后再ternimal下执行命令:
ssh -v git@github.com
最后两句会出现:
No more authentication methods to try.
Permission denied (publickey).
3.这时候再在ternimal下输入:
ssh-agent -s
然后会提示类似的信息:
SSH_AUTH_SOCK=/tmp/ssh-GTpABX1a05qH/agent.404; export SSH_AUTH_SOCK;
SSH_AGENT_PID=13144; export SSH_AGENT_PID;
echo Agent pid 13144;
4.接着再输入:
ssh-add ~/.ssh/id_rsa
这时候应该会提示:
Identity added: ...(这里是一些ssh key文件路径的信息)
(注意)如果出现错误提示:
Could not open a connection to your authentication agent.
请执行命令:eval `ssh-agent -s`后继续执行命令 ssh-add ~/.ssh/id_rsa,这时候一般没问题啦。
5.打开你刚刚生成的id_rsa.pub,将里面的内容复制,进入你的github账号,在settings下,SSH and GPG keys下new SSH key,title随便取一个名字,然后将id_rsa.pub里的内容复制到Key中,完成后Add SSH Key。
6.最后一步,验证Key
在ternimal下输入命令:
ssh -T git@github.com
提示:Hi xxx! You\'ve successfully authenticated, but GitHub does not provide shell access.
这时候你的问题就解决啦,可以使用命令 git clone --recursive git@github.com:capxiaoming/test.git 去下载你的代码啦。
******************************************************************************************************
分支管理
分支在实际中有什么用呢?假设你准备开发一个新功能,但是需要两周才能完成,第一周你写了50%的代码,如果立刻提交,由于代码还没写完,不完整的代码库会导致别人不能干活了。如果等代码全部写完再一次提交,又存在丢失每天进度的巨大风险。
现在有了分支,就不用怕了。你创建了一个属于你自己的分支,别人看不到,还继续在原来的分支上正常工作,而你在自己的分支上干活,想提交就提交,直到开发完毕后,再一次性合并到原来的分支上,这样,既安全,又不影响别人工作。
以上是关于有关git的配置的主要内容,如果未能解决你的问题,请参考以下文章