Part1:CentOS6.5休密码登录

修改/etc/ssh/sshd_config
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile /root/.ssh/authorized_keys
启用这三执行,然后重新开service sshd restart
设置.ssh目录权限
chmod 700 -R .ssh
苟您想使每台机子都管密码登录,那么将每台机子产生的密钥添加顶文件中(这是于叫控端机子上面执行的)
cat id_rsa.pub >> .ssh/authorized_keys

如若碰到登录失败的情形:我之所以之凡centos版本是6.5,centos6.5对纱管理相当严格,需要在本来的基础及关闭selinux,
到/etc/selinux/config下,把SELINUX=enforcing修改为SELINUX=disabled,重开机器,ok

 

Part2:SSH私钥取消密码(passphrase)

作定rsync多大机器中联合文件之后发现原先下的ssh密钥是有密码的,这样每次同步上还待手动输入一糟糕密码才可。

Google后有人提醒可以使用.bash_profile配合ssh-agent来促成每次活动加载密钥到内存中,省去输入密码的环,但.bash_profile有各种弊端,有人专门写了一个称呼keychain的微软件来化解ssh-agent
的欠缺。

但是其实使用的上仍然未是非常顺手,就索性取消了私钥中之密码:

  1. 以openssl命令去丢私钥的密码openssl rsa -in ~/.ssh/id_rsa -out
    ~/.ssh/id_rsa_new

  2. 备份旧私钥mv ~/.ssh/id_rsa ~/.ssh/id_rsa.backup

  3. 动新私钥mv ~/.ssh/id_rsa_new ~/.ssh/id_rsa

  4. 安权限chomd 600 ~/.ssh/id_rsa

取消掉原私钥的密码,配合cron计划任务定时同步文件就得保多尊服务器文件自动更新了。而且只要注意私钥不走漏风声出来,多玉服务器之间无密码登录也利于多。

 

Part3:git查看修改用户名和邮箱地址

GIT 查看/修改用户名和邮箱地址

用户名和邮箱地址的意图

用户名和邮箱地址是本土git客户端的一个变量,不按git库而改。

每次commit都见面为此用户称以及邮箱记录。

github的contributions统计就是遵照邮箱来统计的。

翻开用户名和邮箱地址:

$ git config user.name

$ git config user.email

改用户名和邮箱地址:

$ git config –global user.name “username”

$ git config –global user.email “email”

 

Part4:SSH
登录时出现如下错误:Disconnected:No supported authentication methods
available

题目现象

当您通过 SSH 客户端登录 ECS Linux
实例时,输入正确的账号密码,也会见现出类似如下错误信息。

Symptom

Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
sshd[10826]: Connection closed by XX.XX.XX.XX.
Disconnected: No supported authentication methods available.
由分析

参数 PasswordAuthentication 的默认值为 yes,SSH 服务将那个值置为 no
以禁用密码验证登录,导致该类故障。需要修改 PasswordAuthentication
配置解决者问题。

缓解方法

建议于改动配置文件前 创建快照 备份数据。以 CentOS 6.8 为条例:

由此 管理极 连接并报到到 Linux 实例。

执行命令 cat /etc/ssh/sshd_config 查看 SSH
服务配置,并注意是否带有类似如下配置:

Config

执行命令 vi /etc/ssh/sshd_config,按下 i 编辑 SSH 服务配置文件,将参数
PasswordAuthentication 设置也 yes,或者以 PasswordAuthentication
参数前补加井号(#),按下 Esc 退出编辑模式,并输入 :wq 保存退出。

Shooting

执行命令 service ssh restart 重开 SSH 服务。

 

Part5:用 Git Hooks
进行活动部署

远程连接服务器

生成 SSH 密钥

密钥是未登录连接服务器的通行证,有种刷脸通行的痛感。如果当地就是以不思另外生成的语,可以超过了这步。

cd ~/.ssh 切换目录后因故 ssh-keygen -t rsa -C “用于区分密钥的标识”
生成一对具备相同名字的密钥(默认为 id_rsa
和id_rsa.pub):用于地方的私钥和用来服务器的公钥(有 .pub 扩展名)。

一经私钥名字不是默认的话语,需要手动加入到被「认证」的私钥列表中,否则每次连续服务器都见面唤醒输入服务器的密码。在遇到了有坑(文后发征)后,我当设置
SSH config 最为倚重谱!

编辑 ~/.ssh/config 文件(如果不在则 touch ~/.ssh/config
创建一下),添加以下内容:

Host HOST_ALIAS # 用于 SSH 连接的号,最好及 HostName 保持一致
  HostName SERVER_DOMAIN # 服务器的域名还是 IP 地址
  Port SERVER_PORT # 服务器的捧口号,默认为 22,可选
  User SERVER_USER # 服务器的用户称
  PreferredAuthentications publickey
  IdentityFile ~/.ssh/PRIVATE_KEY # 本机上存的私钥路径

正如所示
Host BRIDGE_REPO
  HostName xxx.xxx.xxx.xxx
  Port 22
  User git
  PreferredAuthentications publickey
  IdentityFile ~/.ssh/id_rsa
服务器端认证

#先用 pbcopy < ~/.ssh/PRIVATE_KEY.pub 将公钥复制到剪贴板;通过 ssh
USER@SERVER
访问服务器,这时会唤起输入密码(它可能只有这么一潮「询问」的机);成功登录后
vim ~/.ssh/authorized_keys,在适当的职 cmd + V 并保存退出(同时
exit退出 SSH 连接)。
登服务器直接 vi /root/.ssh/authorized_keys
以公钥内容复制进去

配置 Git 仓库

开创服务器端仓库

服务器上用安排有限只仓库,一个用于代码中转的远距离仓库,一个用来用户访问的地头仓库。这里的「远程仓库」并无相同于托管代码的「中央仓库」,这点儿独仓库都是为活动同步代码并布置网站要留存。

当存放远程仓库的目中(假设是 /home/USER/repos)执行 git init –bare
BRIDGE_REPO.git 会创建一个饱含 Git 各种配置文件的「裸仓库」。

切换到存放用户所走访文件之目(假设为 /home/USER/www,如果不存在则于
/home/USER 中执 mkdir www):

git init
git remote add origin /home/USER/repos/BRIDGE_REPO.git
git fetch
git checkout master
配置 Git Hook

拿引得切换到 /home/USER/repos/BRIDGE_REPO.git/hooks,用 cp
post-receive.sample post-receive 复制并重命名文件后用 vim post-receive
修改。其情大概如下:
下面的shell脚本自己搜索,可以并不相同
#!/bin/sh

unset GIT_DIR #马上同一句是异常主要之

NowPath=`pwd`
DeployPath=”../../www”

cd $DeployPath
git pull origin master

cd $NowPath
exit 0
使用 chmod +x post-receive 改变一下权后,服务器端的布局就核心完成了。

创新本机的仓库源

在原有的(托管代码的)仓库上加入刚才所安排的服务器上之长途仓库的地点为自,以后往坏来自推送代码后虽会见自行部署了。

总结

当搭建环境时并不曾顺利,磕磕绊绊遇到不少题目,虽然众休值得一提,但有的点还是有记录并分享的价的!

SSH 私钥「认证」

用转的私钥进行「认证」有随地一种方式,然而,起初我用底凡太挫最无依赖谱的
ssh-add ~/.ssh/PRIVATE_KEY——只是以时下 session
有效,一再度开就同时见面叫「询问」了!

 

错误处理
remote: error: cannot open .git/FETCH_HEAD: Permission denied
拿通项目文件夹配置用户和用户组
chown -R git:git BRIDGE_REPO

 

Part6:git
删除本地分支和长距离分支、本地代码回滚和远程代码库回滚

【git 删除本地分支】

git branch -D br

 

【git 删除远程分支】

git push origin :br (origin 后面有空格)

 

git代码库回滚: 指的是以代码库某分支退回到以前的某commit id

【本地代码库回滚】:

git reset –hard commit-id
:回滚到commit-id,讲commit-id之后提交的commit都勾

git reset –hard HEAD~3:将多年来3不良的交付回滚

 

【远程代码库回滚】:

以此是根本要说的情节,过程比本地回滚要复杂

运场景:自动部署系统发布后发觉题目,需要回滚到某一个commit,再还颁布

原理:先将地面分支退回到某个commit,删除远程分支,再另行push本地分支

操作步骤:

1、git checkout the_branch

2、git pull

3、git branch the_branch_backup //备份一下这个分当前之景况

4、git reset –hard the_commit_id
//把the_branch本地回滚到the_commit_id

5、git push origin :the_branch //删除远程 the_branch

6、git push origin the_branch //用回滚后底地方分支重新建远程分支

7、git push origin :the_branch_backup
//如果前面都事业有成了,删除这个备份分支

若采取了gerrit做长途代码中心库和code
review平台,需要确保操作git的用户拥有分支的push权限,并且选择了 Force
Push选项(在push权限设置里产生夫选项)

此外,gerrit中心库是只bare库,将HEAD默认指为了master,因此master分支是未可知拓展删减操作的,最好不用挑选去master分支的策略,换用其他分支。如果一定要是如此做,可以考虑到gerrit服务器上修修改改HEAD指针。。。不建议这样抓

 

有时相互的开了成百上千之风味,建了多底分,时间累加了分段就多矣,想使管非用之子删除,怎么收拾也?
#查阅本地都生什么分支
git branch

#查看有的分段,包括中长途的
git branch -a

#去本地的有分支
git branch -D hongchangfirst

#删去远程的分
git branch -r -d origin/hongchangfirst

#注意这个就是去除本地的目,而未是的确去远程分支的内容,要惦记真正去远程分支上之情节,可以这么:
git push origin :hongchangfirst

瞩目,冒号前面的空格不能够少,相当给将一个空分支push到server上,等于删除该分。

召开也同样叫程序员,除了写写代码外,还担负企业之GIT库的通常保护工作。GIT日常操作不是很多,掌握这些技术便够用了,在此处关键是享受一下GIT分支的删减操作,希望得以扶持到刚刚上学GIT的同校。这里的去除操作主要是服务器本地操作及远端删除操作。

GIT
方法/步骤
前提条件,必须下载安装了GIT客户端软件,以下操作就限于Windows操作。
右键点击GIT库,选择Git Bash选项。
GIT如何去分支
这儿会弹有如下窗口,默认就进去时GIT库。
GIT如何去分支
一般来说图所示,先押一下脚下库中生出哪分支:
git branch -a
GIT如何去分支
使刨除服务器远端的子,则行如下所出示之通令:
git push origin –delete 分支名
GIT如何去分支
只要是只要去本地就合并了的分段,则实施:
git branch –d 分支名
GIT如何去分支
产图备受的下令是以去本地未合并的子:
git branch –D 分支名

 

Part7:git命令之git
remote的用法

假使 参与其他一个 Git
项目的合作,必须要询问该如何管理远程仓库.远程仓库是凭借托管在网及的种类仓库,可能会见发生许多个,其中有些你只能读,另外有些可以写.同别人协作开发有
个品种时,需要管理这些远程仓库,以便推送或拉取数据,分享各自的工作进展.管理远程仓库的工作,包括上加远程库,移除废弃之远程库,管理各式远程库分
支,定义是否跟这些分支,等等.本节咱们将详细座谈远程库的管住和使用.

  查看时底远程库

  要查时部署来什么远程仓库,可以为此 git remote
命令,它会列有每个远程库的简单名字.在仿制了某项目后,至少得看一个称为吧
origin 的远程库,Git 默认使用是名字来标识你所克隆的原始仓库:

  $ git clone git://github.com/schacon/ticgit.git

  Initialized empty Git repository in /private/tmp/ticgit/.git/

  remote: Counting objects: 595, done.

  remote: Compressing objects: 100% (269/269), done.

  remote: Total 595 (delta 255), reused 589 (delta 253)

  Receiving objects: 100% (595/595), 73.31 KiB | 1 KiB/s, done.

  Resolving deltas: 100% (255/255), done.

  $ cd ticgit

(1)git remote 不牵动参数,列有曾有的长距离分支

  $ git remote

  origin

(2)git remote -v | –verbose
列出详细信息,在每一个名背后列有那远程url

这时候, -v 选项(译注:此也 –verbose 的简写,取首字母),显示相应之仿制地址:

  $ git remote -v

  origin
git://github.com/schacon/ticgit.git如果有差不多个长途仓库,此命令将整个排出.比如在自己之
Grit 项目遭到,可以看到:

  $ cd grit

  $ git remote -v

  bakkdoor git://github.com/bakkdoor/grit.git

  cho45 git://github.com/cho45/grit.git

  defunkt git://github.com/defunkt/grit.git

  koke git://github.com/koke/grit.git

  origin
这样一来,我就可老轻松地起这些用户之堆栈着,拉取他们之交由到地方.请注意,上面列有之地址只出
origin 用的凡 SSH URL
链接,所以也只有这个库房我能够推送数据上(我们见面在第四节讲由).

  添加远程仓库

  要补充加一个新的长距离仓库,可以指定一个简单的名,以便将来援引,运行 git
remote add [shortname] [url]:

  $ git remote

  origin

  $ git remote add pb git://github.com/paulboone/ticgit.git

  $ git remote -v

  origin git://github.com/schacon/ticgit.git

  pb git://github.com/paulboone/ticgit.git现在可据此配串 pb
指代对应之库房地址了.比如说,要抓取所有 Paul
有的,但地面仓库没有底消息,可以运行 git fetch pb:

  $ git fetch pb

  remote: Counting objects: 58, done.

  remote: Compressing objects: 100% (41/41), done.

  remote: Total 44 (delta 24), reused 1 (delta 0)

  Unpacking objects: 100% (44/44), done.

  From git://github.com/paulboone/ticgit

  * [new branch] master -> pb/master

  * [new branch] ticgit -> pb/ticgit

现行,Paul 的骨干分支(master)已经完全可以在该地访问了,对应之名是
pb/master,你可拿其合并到温馨之有分支,或者切换至之分,看看小什么有趣之还

 

二.经过git remote 建立远程仓库

树立远程仓库
近年来直接于习用git来保管自己的主次,总是今天东学一点,明天西凑一点,到用底上,总是有点茫然不知所坐。

在博客园里看见一首老好之稿子,教我们做笔记啦,但是举行扫尾记还是要记总结哦!

来吧,让咱并来总吧,今天先期来探视git远程的仓库是怎么建之。

本来,使用git嘛,第一步肯定是得新建一个git仓库,总得有只操作的空间吧,巧妇难为无米之炊嘛。

1.初始化一个缺损的git仓库

1 software@debian:~$ mkdir yafeng
2 software@debian:~$ cd yafeng/
3 software@debian:~/yafeng$ ls
4 software@debian:~/yafeng$ git init
5 Initialized empty Git repository in /home/software/yafeng/.git/
6 software@debian:~/yafeng$
令注释:

每当面的下令中,真正去初始化的是第四履的那么句—git init

当然,还有许多同学会看见加了参数–bare的吩咐,这个命令会在我们随后渐次为大家讲,对于不是当共享仓库,而是作为一个祥和操作的库,上面这样就算够用了。

哼了,现在yafeng目录就是咱的据点—git仓库了啊。

下我们到底要开点啊的吧,入宝山总不可知独看正在啊:

2.向仓库提交我们刻画的文本

1 software@debian:~/yafeng$ echo “our first git repository” >>
file
2 software@debian:~/yafeng$ ls
3 file
4 software@debian:~/yafeng$ git add file
5 software@debian:~/yafeng$ git commit -m “the first file to commit”
file
6 [master (root-commit) 0c72641] the first file to commit
7 1 files changed, 1 insertions(+), 0 deletions(-)
8 create mode 100644 file
9 software@debian:~/yafeng$
命说:
俺们以仓库被新建了一个文件file,作为咱们的以身作则文件。

第4执:将file文件的信补充加至git仓库的索引库中,并从未真的添加到仓库。当然上例被之file文件只是我们的演示,它是一个门路,因此,可以是文本,更得是目录。

第5履:将索引库中的内容为git仓库进行付出。这步后文件file才算真正付诸到拉git仓库中。双引号中之始末是冲每次修改的异内容,由我们团结去填的,

广大人数会见看见

  git commit -a -m “ ”

当下长长的的下令是在你早就add了一个或者多独文本了以后,然后修改了这些文件,就得采取该令进行提交。

好了,不管怎么样,终于是将文件提交到仓库了。可是本之仓库就是一个地方的库,我们的对象是成为远程仓库哦,继续吧。

3.于地头仓库添加一个长途仓库,并以当地的master分支跟踪至长途分支

1 software@debian:~/yafeng$ git remote add origin
ssh://software@172.16.0.30/~/yafeng/.git
2 software@debian:~/yafeng$ git push origin master
3 software@172.16.0.30’s password:
4 Everything up-to-date
5 software@debian:~/yafeng$
令注释:

第1实行:在该地仓库添加一个远道仓库,当然ssh后面的地址是咱们当地仓库的地址.

第2实施:将当地master分支跟踪及长途分支,在git仓库建立的新即见面产生一个默认的master分支,当然你只要成立了任何分支,也足以用同一的道去同踪.

于分段的政工,我们会以之后细细的讲述.

形成拉就同样步了啊?我报你,你就做到目的了哦,现在之git仓库已经是一个远道仓库了,

切莫信赖呢?我们来测试相同不好投其所好:

4.测试

今昔本机上看看:

1 software@debian:~/yafeng$ git remote show origin
2 software@172.16.0.30’s password:
3 * remote origin
4 Fetch URL: ssh://software@172.16.0.30/~/yafeng/.git
5 Push URL: ssh://software@172.16.0.30/~/yafeng/.git
6 HEAD branch: master
7 Remote branch:
8 master tracked
9 Local ref configured for ‘git push’:
10 master pushes to master (up to date)
11 software@debian:~/yafeng$

代码注释:

第1实行:显示远程信息

广大见就尚是碰头反对的,这还要能够征什么吗?好,那即便来点莫过于的:

于其余一个电话上,远程clone

1 root@yafeng-VirtualBox:~# ls
2 bin gittest read_temp
3 root@yafeng-VirtualBox:~# git clone
ssh://software@172.16.0.30/~/yafeng/.git
4 Cloning into yafeng…
5 software@172.16.0.30’s password:
6 remote: Counting objects: 9, done.
7 remote: Compressing objects: 100% (3/3), done.
8 remote: Total 9 (delta 0), reused 0 (delta 0)
9 Receiving objects: 100% (9/9), done.
10 root@yafeng-VirtualBox:~# ls
11 bin gittest read_temp yafeng
12 root@yafeng-VirtualBox:~# cd yafeng/
13 root@yafeng-VirtualBox:~/yafeng# ls
14 file
15 root@yafeng-VirtualBox:~/yafeng#

代码注释:

第3行:就是远程clone仓库.很强烈的自查自纠可以知晓多矣yafeng目录,而这yafeng目录里的内容跟我们另外一令机子上之情节一致

至此,一个简单易行的git远程仓库就打好了,简单不,试试吧!!

 

part8:SSH下know_hosts的作用

ssh会把您每个你看过计算机的公钥(public
key)都记录在~/.ssh/known_hosts。当下次拜会同计算机时,OpenSSH会核对公钥。如果公钥不同,OpenSSH会发出警示,
避免你被DNS Hijack之类的口诛笔伐。我在方列有的图景,就是这种气象。

因:一光主机上生多只Linux系统,会时常切换,那么这些网运用同一ip,登录了一样软后哪怕见面拿ssh信息记录在地头的~/.ssh/known_hsots文件被,切换该系统后又就此ssh访问这大主机就会出现冲警告,需要手动删除修改known_hsots里面的情。

起以下简单个缓解方案:

  1. 手动删除修改known_hsots里面的情节;
  2. 改配置文件“~/.ssh/config”,加上这简单执行,重开服务器。
    StrictHostKeyChecking no
    UserKnownHostsFile /dev/null

优缺点:
1.
得每次手动删除文件内容,一些自动化脚本的力不从心运行(在SSH登陆时失败),但是安全性高;

  1. SSH登陆时见面忽略known_hsots的看,但是安全性低;

 

Part9:git diff命令详解

git diff命令详解

diff里面a表示前老变量,b表示第二只变量

HEAD commit版本
Index staged版本

a、查看尚未暂存的公文更新了哪有,不加以参数直接输入
git diff
夫命令于的凡办事目录(Working tree)和暂存区域快照(index)之间的差别
呢就算是改以后还没有暂存起来的转变内容。

b、查看已经暂存起来的文件(staged)和上次付出时之快照之间(HEAD)的歧异
git diff –cached
git diff –staged
显的是下一样软commit时会见交到到HEAD的情节(不带来-a情况下)

c、显示工作版本(Working tree)和HEAD的别
git diff HEAD

d、直接以片只支行上风行的付做diff
git diff topic master 或 git diff topic..master

e、输出自topic和master分别支付以来,master分支上的changed。
git diff topic…master
Changes that occurred on the master branch since when the topic
branch was started off it
f、查看简单的diff结果,可以长–stat参数
git diff –stat

g、查看当前目录和另外一个分层的反差
git diff test
著当前目录和另一个让’test’分支的别
git diff HEAD — ./lib
显示当前目录下之lib目录和上次提交之间的出入(更准确的身为在脚下分支下)

h、比较上次提交commit和高达上次提交
git diff HEAD^ HEAD

i、比较简单个历史版本中的距离
git diff SHA1 SHA2

 

Part10:git push出现的缪

$ git push
Enter passphrase for key ‘/f/wamp64/www/.ssh/id_rsa’:
Counting objects: 6, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (6/6), done.
Writing objects: 100% (6/6), 827 bytes | 206.00 KiB/s, done.
Total 6 (delta 4), reused 0 (delta 0)
remote: error: insufficient permission for adding an object to
repository database ./objects
remote: fatal: failed to write object
error: remote unpack failed: unpack-objects abnormal exit
To ssh://xxx.xxx.xxx.xxx/data/gitshare/erp.git
! [remote rejected] master -> master (unpacker error)
error: failed to push some refs to
‘ssh://git@xxx.xxx.xxx.xxx/data/gitxxx/xxx.git’

解决:
chown -R git:git xxx.git

 

Part11:git查询某次修改的情

Git 查询某次历史提交的改动内容
以劳作时,有时候想翻某次的付修改了如何的情。
我们先是可以git log显示历史的交列表:
而后咱们因此git show <commit-hashId> 便好来得某次提交的改内容
平 git show <commit-hashId> filename
可以显示某次提交的某内容之改动信息。

 

Part12:Git
本地的撤修改及去操作

相同:撤销操作

据自己现在readme.txt文件里长一行
情节吧555555555555,我们先行经过命令查看如下: 

在自己弗提交之前,我意识加上5555555555555情来误,所以自己得立恢复原先的本子,现在我好来如下几栽艺术可做修改: 

首先:如果自己懂要删掉那些情节之言辞,直接手动更改去丢那些欲之公文,然后add添加到暂存区,最后commit掉。 

亚:我得以以先的方直接回复到齐一个版。使用 git reset –hard
HEAD^ 

但今自家无思量行使方面的2栽艺术,我怀念一直想用撤销令该怎么操作为?首先在召开撤销之前,我们可优先用
git status 查看下当前的状态。如下所示:

 

得发现,Git会告诉你,git checkout — file
可以摒弃工作区的修改,如下命令: 

git checkout – readme.txt,如下所示:

 

指令 git checkout –readme.txt
意思就是,把readme.txt文件于工作区做的改动总体撤销,这里发出2栽状态,如下:

  1. readme.txt自动修改后,还没坐暂存区,使用
    撤销修改就回与版本库一模一样的状态。
  2. 除此以外一种植是readme.txt已经放入暂存区了,接着又作了改,撤销修改就回去添加暂存区后的状态。

实则为即是取消到最终一不好没有放入暂存区的状态。 

对第二栽情景,我怀念我们后续召开demo来拘禁下,假如现在自己对readme.txt添加一行
情呢6666666666666,我git add
增加到暂存区后,接着添加内容7777777,我想经过取消令于该回到暂存区后的状态。如下所示: 

 

在意:命令git checkout — readme.txt 中之 — 很重点,如果没 —
的语,那么命令成创建分支了。 

老二:删除文件。

倘我今天本库testgit目录添加一个文本b.txt,然后提交。如下: 

 

设齐:一般景象下,可以一直在文件目录中管文件去了,或者采取要上rm命令:rm
b.txt ,如果本身怀念彻底从版本库中删掉了之文件之语,可以重实行commit命令
提交掉,现在目录是如此的 

 

如若没有commit之前,如果自己怀念在版本库中还原是文件如何操作也? 

得利用如下命令 git checkout — b.txt,如下所示:

 

还来探我们testgit目录,添加了3只文件了。如下所示:

 

 

 

Part13:git命令之git clone用法

git命令之git clone用法

转:http://blog.csdn.net/wangjia55/article/details/8818845
以动git来拓展版本控制时,为了得一个项目之正片(copy),我们需要了解这个类别仓库的地址(Git
URL). Git能于无数磋商下以,所以Git URL可能以ssh://, http(s)://,
git://,或是只是因一个用户称(git 会认为这是一个ssh 地址)为眼前辍.
微仓库可以透过不只一栽协议来拜会,例如,Git本身的源代码你既可以为此
git:// 协议来做客:
git clone git://git.kernel.org/pub/scm/git/git.git
否可经http 协议来访问:
git clone http://www.kernel.org/pub/scm/git/git.git
git://协议较为快速与行之有效,但是有时必须采用http协议,比如你企业之防火墙阻止了你的非http访问请求求.如果您行了地方两履命令中的任意一个,你见面相一个初目录:
‘git’,它富含有的Git源代码和历史记录.
在默认情况下,Git会将”Git
URL”里最后一级目录名的’.git’的后辍去丢,做啊新克隆(clone)项目的目录名:
(例如. git clone
http://git.kernel.org/linux/kernel/git/torvalds/linux-2.6.git
会建立一个索引给’linux-2.6′)
除此以外,如果访问一个Git URL需要为此法名和密码,可以于Git
URL前增长用户称,并当其中间加上@符合以代表分割,然后实施git
clone命令,git会提示您输入密码。
示例
git clone robin.hu@http://www.kernel.org/pub/scm/git/git.git
如此这般用以当robin.hu用户称访问http://www.kernel.org/pub/scm/git/git.git,然后按回车键执行git
clone命令,git会提示而输入密码。
除此以外,我们得经-b <name>来指定要克隆的分支名,比如
$ git clone -b master2 ../server .
代表克隆名为master2的此分,如果简单-b
<name>表示克隆master分支。

GIT URLS

In general, URLs contain information about the transport protocol, the
address of the remote server, and the path to the repository. Depending
on the transport protocol, some of this information may be absent.
Git natively supports ssh, git, http, https, ftp, ftps, and rsync
protocols. The following syntaxes may be used with them:
ssh://[user@]host.xz[:port]/path/to/repo.git/
git://host.xz[:port]/path/to/repo.git/
http[s]://host.xz[:port]/path/to/repo.git/
ftp[s]://host.xz[:port]/path/to/repo.git/
rsync://host.xz/path/to/repo.git/
An alternative scp-like syntax may also be used with the ssh protocol:
[user@]host.xz:path/to/repo.git/
The ssh and git protocols additionally support ~username expansion:
ssh://[user@]host.xz[:port]/~[user]/path/to/repo.git/
git://host.xz[:port]/~[user]/path/to/repo.git/
[user@]host.xz:/~[user]/path/to/repo.git/
For local repositories, also supported by git natively, the following
syntaxes may be used:
/path/to/repo.git/
file:///path/to/repo.git/

Examples

Clone from upstream:
$ git clone git://git.kernel.org/pub/scm/…/linux-2.6 my2.6 $ cd my2.6
$ make
Make a local clone that borrows from the current directory, without
checking things out:
$ git clone -l -s -n . ../copy $ cd ../copy $ git show-branch
Clone from upstream while borrowing from an existing local directory:
$ git clone –reference my2.6 \
git://git.kernel.org/pub/scm/…/linux-2.7 \ my2.7 $ cd my2.7
Create a bare repository to publish your changes to the public:
$ git clone –bare -l /home/proj/.git /pub/scm/proj.git
Create a repository on the kernel.org machine that borrows from Linus:
$ git clone –bare -l -s /pub/scm/…/torvalds/linux-2.6.git \
/pub/scm/…/me/subsys-2.6.git

Part14:Git远程操作详解

Git长途操作详解

Git大凡现阶段太盛的本子管理体系,学会Git差一点变成了开发者的必需技能。

Git来不少优势,其中某就是是长途操作特别简便。本文详细介绍5独Git指令,它们的概念以及用法,理解了这些情节,你不怕见面全盘控制Git长途操作。

  • § git clone
  • § git remote
  • § git fetch
  • § git pull
  • § git push

本文针对初级用户,从太简便的出口起,但是得读者对Git的主导用法有了解。同时,本文覆盖了上面5独指令的几拥有的常用用法,所以对熟练用户为起参考价值。

 

一、git clone

远程操作的率先步,通常是打远程主机克隆一个版本库,这时就要使git clone命令。

 

$ git clone <版本库的网址>

本,克隆jQuery的版本库。

 

$ git clone https://github.com/jquery/jquery.**git**

该命令会在当地主机生成一个目录,与远程主机的版本库同名。如果要是指定不同之目录名,可以以目录名作为git clone命的次只参数。

 

$ git clone <版本库底网址> <本地目录名>

git clone支撑多磋商,除了HTTP(s)以外,还支持SSH、Git、本地文件协议等,下面是部分例。

 

$ git clone http[s]://example.com/path/to/repo.git/

$ git clone ssh://example.com/path/to/repo.git/

$ git clone git://example.com/path/to/repo.git/

$ git clone /opt/git/project.git

$ git clone file:///opt/git/project.git

$ git clone ftp[s]://example.com/path/to/repo.git/

$ git clone rsync://example.com/path/to/repo.git/

SSH协议还有其余一样种植写法。

 

$ git clone [user@]example.com:path/to/repo.git/

平常来说,Git情商下载速度最抢,SSH协议用于需要用户征的场子。各种协商优劣的详实谈论要参考官方文档。

二、git remote

为便于管理,Git渴求每个远程主机都须指定一个主机名。git remote命令就用来管理主机名。

非带选项之上,git remote命令列出所有长途主机。

 

$ git remote

origin

动用-v选项,可以参照远程主机的网址。

 

$ git remote -v

origin  git@github.com:jquery/jquery.git (fetch)

origin  git@github.com:jquery/jquery.git (push)

地方命令表示,当前止来同等宝远程主机,叫做origin,以及它们的网址。

克隆版本库的当儿,所利用的长途主机自动为Git取名吧origin。如果想用外的主机名,需要为此git clone一声令下的-o选项指定。

 

$ git clone -o jQuery https://github.com/jquery/jquery.**git**

$ git remote

jQuery

地方命令表示,克隆的时刻,指定远程主机叫做jQuery。

git remote show命令加上主机名,可以查该主机的详细信息。

 

$ git remote show <主机名>

git remote add命令用于添加远程主机。

 

$ git remote add <主机名> <网址>

git remote rm命令用于去远程主机。

 

$ git remote rm <主机名>

git remote rename命令用于远程主机的化名。

 

$ git remote rename <原主机名> <新主机名>

三、git fetch

要是远程主机的本子库发生了创新(Git术语叫做commit),需要以这些创新取回本地,这时就要动用git fetch命令。

 

$ git fetch <远程主机名>

地方命令将有远程主机的更新,全部取回本地。

git fetch命令通常用来查其他人的进程,因为它们获回的代码对你本地的支付代码没有影响。

默认情况下,git fetch取回所有支行(branch)的换代。如果只有想取回特定分支的翻新,可以指定分支名。

 

$ git fetch <远程主机名> <分支名>

比如,取回origin主机的master分支。

 

$ git fetch origin master

所取得回之翻新,在本地主机上如为此”远程主机名/分支名”的款式读取。比如origin主机的master,就要用origin/master读取。

git branch命令的-r选项,可以据此来查阅远程分支,-a选项查看所有支行。

 

$ git branch -r

origin/master

 

$ git branch -a

* master

  remotes/origin/master

面命令表示,本地主机的目前分是master,远程分支是origin/master。

取回远程主机的更新之后,可以在它的基本功及,使用git checkout命令创建一个新的分段。

 

$ git checkout -b newBrach origin/master

上面命令表示,在origin/master的根基及,创建一个初支行。

除此以外,也可以动用git merge命令或者git rebase命令,在地方分支上合远程分支。

 

$ git merge origin/master

# 或者

$ git rebase origin/master

地方命令表示在当前子上,合并origin/master。

四、git pull

git pull命令的作用是,取回远程主机某个分支的翻新,再与本土的指定分支合并。它的完整格式稍粗有硌复杂。

 

$ git pull <远程主机名> <远程分支名>:<本地分支名>

本,取回origin主机的next分支,与地方的master分支合并,需要写成下面这样。

 

$ git pull origin next:master

倘远程分支是同眼前分合并,则冒号后面的一部分好省略。

 

$ git pull origin next

面命令表示,取回origin/next分支,再和目前子合并。实质上,这无异于于事先做git fetch,再做git merge。

 

$ git fetch origin

$ git merge origin/next

当好几场合,Git会活动在本土分支和远程分支中,建立平等种植追踪关系(tracking)。比如,在git clone的下,所有地方分支默认与远程主机的同名分支,建立追踪关系,也就是说,本地的master分支自动”追踪”origin/master分支。

Git啊同意手动建立追踪关系。

 

git branch –set-upstream master origin/next

方命令指定master分支追踪origin/next分支。

倘若手上分和远程分支存在追踪关系,git pull就足以概括远程分支名。

 

$ git pull origin

方命令表示,本地的即支行自动以及相应之origin主机”追踪分支”(remote-tracking
branch)进行合并。

倘手上支行就来一个追踪分支,连远程主机名都可以大概。

 

$ git pull

点命令表示,当前支行自动以及唯一一个追踪分支进行联合。

设统一需要运用rebase模式,可以以–rebase选起。

 

$ git pull –rebase <远程主机名>
<远程分支名>:<本地分支名>

一旦远程主机删除了某个分支,默认情况下,git pull 不会见以拉取远程分支的时,删除相应的地面分支。这是为以防万一,由于其他人操作了远程主机,导致git pull不知不觉删除了地面分支。

而,你可以转移这行为,加上参数 -p 就会见当地面去远程已经去的道岔。

 

$ git pull -p

# 等同于下的命

$ git fetch –prune origin

$ git fetch -p

五、git push

git push命令用于将地方分支的换代,推送及长途主机。它的格式和git pull命令相仿。

 

$ git push <远程主机名> <本地分支名>:<远程分支名>

在意,分支推送顺序的写法是<来源地>:<目的地>,所以git pull是<远程分支>:<本地分支>,而git push是<本地分支>:<远程分支>。

若果看略远程分支名,则象征以地方分支推送和的在”追踪关系”的长距离分支(通常两者同名),如果该远程分支不存在,则会叫新建。

 

$ git push origin master

方命令表示,将地面的master分支推送到origin主机的master分支。如果后者不设有,则会于新建。

要是简单本地分支名,则表示去指定的远程分支,因为就无异于于推送一个缺损的本地分支到长途分支。

 

$ git push origin :master

# 等同于

$ git push origin –delete master

上面命令表示去origin主机的master分支。

如手上分和长途分支中有追踪关系,则地面分支和长距离分支都可简简单单。

 

$ git push origin

上面命令表示,将眼前子推送至origin主机的相应分支。

倘手上分就出一个追踪分支,那么主机名都可以略。

 

$ git push

一经手上分和大多独主机是追踪关系,则可用-u选项指定一个默认主机,这样后就可不加其余参数使用git push。

 

$ git push -u origin master

地方命令将本地的master分支推送到origin主机,同时指定origin为默认主机,后面就可免加以另参数使用git push了。

不牵动任何参数的git push,默认只推送当前分,这叫做simple方式。此外,还有平等种matching方式,会推送所起有对应的长途分支的地方分支。Git 2.0版之前,默认使用matching方法,现在改变吗默认使用simple方式。如果要是改者设置,可以利用git config命令。

 

$ git config –global push.default matching

# 或者

$ git config –global push.default simple

再有平等种植状况,就是不管是不是是对应之长途分支,将当地的拥有支行都推送到长途主机,这时急需采取–all选项。

 

$ git push –all origin

方命令表示,将有着地方分支都推送至origin主机。

如果远程主机的版比地方本更新,推送时Git见面报错,要求先行以当地做git pull合并差异,然后再度推向送及长途主机。这时,如果你得要是推送,可以运用–force选项。

 

$ git push –force origin

方命令下–force选码,结果造成远程主机上更新的版本被覆盖。除非您怪确定要这么做,否则应当尽量避免使用–force选桩。

最后,git push不会推送标签(tag),除非采用–tags选项。

 

$ git push origin –tags

(完)

 

相关文章

网站地图xml地图