git bash here创建项目无法选择m_版本控制Git基础及使用详解

70649e97fc600e1fb53a357fd06203c8.png

1、Git简介

1.1、简介

Git是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。 Git的读音为/gɪt/。

Git是一个开源的分布式版本控制系统,用以有效、高速的处理从很小到非常大的项目版本管理。Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

Git 是用于 Linux内核开发的版本控制工具。与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持(wingeddevil注:这得分是用什么样的服务端,使用http协议或者git协议等不太一样。并且在push和pull的时候和服务器端还是有交互的。),使源代码的发布和交流极其方便。 Git 的速度很快,这对于诸如 Linux kernel 这样的大项目来说自然很重要。 Git 最为出色的是它的合并跟踪(merge tracing)能力。

1.2、git的开发过程(图释)

45b84addf3d919f8d6348236770d25fa.png

2、Git的安装、部署

2.1、Ubuntu搭建Git服务器

2.1.1、安装git

#sudo rpm –qa|grep –i git#sudo apt-get install git ó #apt-get install git-core#apt-get install openssh-server openssh-clinet //都是安装好了的,可能版本有点低。#sudo apt-get update //更新一下安装

git-core是git版本控制核心软件。安装openssh-server和openssh-client是由于git需要通过ssh协议来在服务器与客户端之间传输文件。

2.1.2、安装Python-setuptools、gitosis –用于权限管理

#sudo apt-get install Python-setuptools初始化服务器git用户 可以用cat ~/.gitconfig查看#git config –global user.name “liyulin”
85b960da5a6d34edb7bc56166c502084.png
#git config –global user.email “liyulinbill@q q.com”

初始化服务器用户信息后,就可以安装gitosis了,gitosis主要是用于给用户授权,设置权限也算是很方便的。

在root目录下(也可以是其他目录):

:/root/#mkdir git_osis#cd git_osis
ad7b89e28cdd2fa62b1dd60c84e13bef.png
#git clone git://eagain.net/gitosis.git<=>#git clone https://github.com/res0nat0r/gitosis.git#cd gitosis #sudo python setup.py install

2.1.3、创建git管理员账户、配置git

#sudo adduser gitadmin

设置项目仓库存储点,给予gitadmin个人权限

#cd /home #mkdir gitrepository #chown gitadmin:gitadmin /home/gitrepository/

88505d15d78f2a9458fc38b183be18d6.png

#chmod 700 /home/gitrepository/gitosis默认状态下会将仓库放在用户的repositories目录下,所以要在存储点建立各个用户的repository的软连接。

#sudo ln –s /home/gitrepository /home/gitadmin/repositories

4f87c530f4dcf459f51d6d48ec0cce66.png

成为管理员:无论是不是本机都可以通过生成ssh公钥的方法成为管理员

#ssh-keygen –t rsa

da630ca94b67505af136841f274891a3.png

然后用刚生成公钥id_rsa.pub来对gitosis进行初始化。

d1aa85f3e3d3be2f06c5a60f4f2cdabb.png

gitosis主要是通过gitosis-admin.git仓库来管理一些配置文件的,如用户权限的管理。这里需要对其中的一个post-update文件添加可执行的权限。

# sudo chmod 755 /home/gitadmin/repositories/gitosis-admin.git/hooks/post-update

2.2、建仓、授权

先建一个空仓

c6e83a9d27b79b9ac30a3eeb6aeb8448.png

区分一下git init 和 git init –bare:

参考:http://tanglei528.blog.163.com/blog/static/433533992013023112825487/

一般个人使用,用git init,这时候你的工作区也在这里。你要是想建立一个固定的地址让大家一起用,就在服务器上用--bare。其实你可以看到,init建立的.git目录内容和--bare建立的目录内容是差不多的。

用"git init"初始化的版本库用户也可以在该目录下执行所有git方面的操作。但别的用户在将更新push上来的时候容易出现冲突。

比如有用户在该目录(就称为远端仓库)下执行git操作,且有两个分支(master 和 b1),当前在master分支下。另一个用户想把自己在本地仓库(就称为本地仓库)的master分支的更新提交到远端仓库的master分支,他就想当然的敲了

git push origin master:master

于是乎出现:

因为远端仓库的用户正在master的分支上操作,而你又要把更新提交到这个master分支上,当然就出错了。

但如果是往远端仓库中空闲的分支上提交还是可以的,比如:

git push origin master:b1 还是可以成功的。

解决办法就是使用”git init –bare”方法创建一个所谓的裸仓库,之所以叫裸仓库是因为这个仓库只保存git历史提交的版本信息,而不允许用户在上面进行各种git操作,如果你硬要操作的话,只会得到下面的错误(”This operation must be run in a work tree”)。这个就是最好把远端仓库初始化成bare仓库的原因。

2.3、管理相关权限

在之前/home/gitadmin/目录下:克隆了gitosis-admin.git仓库。这个是在客户端机器上clone下来,然后使用gitosis权限管理。

在gitosis-admin.git仓库里面有gitosis.conf的配置文件和一个keydir的目录。gitosis.conf用于配置用户的权限信息,

keydir主要用户存放ssh公钥文件(一般以“用户名.pub”命名,gitosis.conf配置文件中需使用相同用户名),用于认证请求的客户端机器。

现在让需要授权的用户使用前面的方式各自在其自己的机器上生成相应的ssh公钥文件,管理员把他们分别按用户名命名好,复制到keydir目录下。

然后vim gitosis-config文件:

3376158d41752179e10000625300e6f0.png

2.4、Git客户端安装配置

从网上下载,点击安装

选择安装组件

也可以默认选择;

– 图标组件(Addition icons) : 选择是否创建快速启动栏图标 或者 是否创建桌面快捷方式;

– 桌面浏览(Windows Explorer integration) : 浏览源码的方法, 单独的上下文浏览 只使用bash 或者 只用Git GUI工具; 高级的上下文浏览方法 使用git-cheetah plugin插件;

– 关联配置文件 : 是否关联git配置文件, 该配置文件主要显示文本编辑器的样式;

– 关联shell脚本文件 : 是否关联Bash命令行执行的脚本文件;

– 使用TrueType编码 : 在命令行中是否使用TruthType编码, 该编码是微软和苹果公司制定的通用编码;

2e24496890d6ff4bef98e7e0a845ca96.png

设置环境变量

选择使用什么样的命令行工具, 一般情况下我们默认使用Git Bash即可, 默认选择;

– Git自带 : 使用Git自带的Git Bash命令行工具;

– 系统自带CMD : 使用Windows系统的命令行工具;

– 二者都有 : 上面二者同时配置, 但是注意, 这样会将windows中的find.exe 和 sort.exe工具覆盖, 如果不懂这些尽量不要选择;

7a278183dbdc4cb1cf1414033d7cc370.png

选择换行格式

– 检查出windows格式转换为unix格式 : 将windows格式的换行转为unix格式的换行在进行提交;

– 检查出原来格式转为unix格式 : 不管什么格式的, 一律转为unix格式的换行在进行提交;

– 不进行格式转换 : 不进行转换, 检查出什么, 就提交什么;

其实就是下载后一直点击next按钮就安装得差不多了。然后我们就可以使用git的自带命令行工具了。

然后通过bash生成私钥和公钥,将公钥.pub文件上传给服务器(或者网站),通过rsa认证。之后就可以通过openssh命令行,在bash上进行操作了。具体的命令行操作见三、1、服务器。

2.5、TortoiseGit安装配置

和Git客户端安装差不多,下载一个安装包,然后一直点next就ok了。

61cfa34e61b2f0d48866033ff33470ae.png

其实我们从网上下载安装的TortoiseGit,默认的都是Putty了。但是选择第一个后续会有很多事,而选择第二个,则后续配置简单些。

fcb4e5f533697b45d6faf4f48094d913.png

设置putty私钥(选择的是putty时候)

TortoiseGit 使用扩展名为ppk的密钥,而不是ssh-keygen生成的rsa密钥。使用命令ssh-keygen -C "邮箱地址" -t rsa产生的密钥在TortoiseGit中不能用。而基于git的开发必须要用到rsa密钥,因此需要用到TortoiseGit的putty key generator工具来生成既适用于git的rsa密钥也适用于TortoiseGit的ppk密钥,具体配置步骤如下:

在TortoiseGit的安装目录下C:Program FilesTortoiseGitbin找到puttygen.exe,就是转换工具,双击如下: 然后点击Generate

01017275506a5d66c9dd20b1e07d2da1.png

鼠标在上图的空白地方来回移动直到进度条完毕,就会自动生一个随机的key

54b968a5aa4b1a268183817313d4423b.png

如有需要,可以为密钥设置对应的访问密码,就是修改上图中“Key passphrase”和“Confirm passphrase”的值。

3)将上图中多行文本框的内容全选、复制,并粘贴到git账户的 SSH public key中,这就是适用于git的公钥。

4)点击上图中的“Save private key”按钮,将生成的key保存为适用于TortoiseGit的私钥(扩展名为.ppk)。

5)运行TortoiseGit开始菜单中的Pageant程序,程序启动后将自动停靠在任务栏中,图标显示为

c014b8b1e3faa258eaf8dd7b6a6963aa.png

,双击该图标,弹出key管理列表

6)“Add Key”按钮,将第4步保存的ppk私钥添加进来,关闭对话框即可

3、Git的使用方法

3.1、服务器(命令行)

3.1.1、版本库的创建

$mkdir git_src$cd git_src$git init

3.1.2、增加内容

$Git add /usr/git/….$Git add liyulin

添加所有未跟踪文件用 git add -A, 添加所有未跟踪文件并且提交用 git commit -a。(注意大小写)

3.1.3、提交内容

$Git commit$git status$git diff$git commit –a –m “newfile” =>$git add file +$git commit –m “newfile”

3.1.4、管理分支

$git branch

请注意:master 是默认的分支,这也是为什么 .git/HEAD 创建的时候就指向 master 的原因,尽管目前它其实并不存在。 git 将假设你会在 master 上开始并展开你以后的工作,除非你自己创建你自己的分支。

3.1.5、创建分支

$git branch liyulin$git checkout liyulin

更简单和常用的方法是直接通过 checkout 命令来一次性创建并转移到新建分支上,命令如下:

$ git checkout -b robin [start_point]

其中 start_point 是一个可选参数,指定新建分支 robin 是基于哪个节点,默认为当前所在分支的节点

3.1.6、删除分支

$git branch –d branch-name

注意如果删除的分支还没有被 merge 到其他分支,删除这样的分支会导致这个分支上所做的改动丢失,因此 git branch -d 命令会失败,提示你这样做会丢失信息。如果你的确想删除这样的分支,不怕信息丢失,那么可以使用 git branch -D 命令,这个命令不会去判断分支的merge状态。

3.1.7、查看项目的发展变化和比较差异

$git show-branch$git diff$git whatchanged

Ex.$git diff master liyulin 查看master和liyulin版本的差异情况。

3.1.8、合并分支

$git merge将liyulin分支上的工作merge到master上$git checkout master$git merge “Message :merge from liyulin” liyulin<=>$git checkout master$git pull liyulin注意:git pull 的本意是用来 merge 远端版本库中的某个分支。合并时若有冲突,会出现冲突提示,这时需要人手动协商、解决冲突。

3.1.9、逆转(Undo)恢复(Redo)

$git reset [--mixed | --soft | --hard] []

--mixed

仅是重置索引的位置,而不改变你的工作树中的任何东西(即,文件中的所有变化都会被保留,也不标记他们为待提交状态),并且提示什么内容还没有被更新了。这个是默认的选项。

--soft

既不触动索引的位置,也不改变工作树中的任何内容,我们只是要求这些内容成为一份好的内容(之后才成为真正的提交内容)。这个选项使你可以将已经提交的东西重新逆转至“已更新但未提交(Updated but not Check in)”的状态。就像已经执行过 git update-index 命令,但是还没有执行 git commit 命令一样。

--hard

将工作树中的内容和头索引都切换至指定的版本位置中,也就是说自 之后的所有的跟踪内容和工作树中的内容都会全部丢失。因此,这个选项要慎用,除非你已经非常确定你的确不想再看到那些东西了。

提取数据

$git checkout –f liyulin.doc

这是个很有用的小技巧,如果你对你现在的工作目录下的东西已经不耐烦了,随时可以取出你提交过的东西覆盖掉当前的文件。

类型标签—轻标签、署名标签

3.1.10、合并工作

$git fetch 

事实上,远程合并的无非就是“抓取(fetch)一个远程的版本库中的工作到一个临时的标签中”,然后再使用 git-merge 命令。根据不同的远程版本库所使用的通讯协议的路径来替代上面的 remoted-repository 就可以了。

Rsync rsync://remote.machine/patch/to/repo.git/SSH remote.machine:/path/to/repo.git <=>ssh://remote.machine/patch/to/repo.git/Git Native git://remote.machine/path/to/repo.git/Ex. $ git-fetch liyulin@192.168.1.112:/path/to/gittutorcn.git (1) 其中liyulin为登录的用户名,192.168.1.112为服务器的IP地址

3.1.11、协同工作

$git clone /home/liyulin/project myrepo

这样就创建了一个保存着 liyulin 的版本库的镜像的新目录 "myrepo"。这个镜像保存着原始项目的起点和它的发展历程。

$cd /home/liyulin/myrepo$git pull /home/liyuande/LYDrepo

这样就将liyuande版本库中的 "master" 分支的变化引入了。 liyulin 也可以通过在 pull 命令的后面加入参数的方式来引入其他的分支

Liyulin可以先将liyuande的工作导入到新的临时分支中:

$git fetch /home/liyuande/LYDrepo master:lyd-incoming

这个命令将 liyuande 的 master 分支的导入到名为 lyd-incoming 的分支中(不同于 git-pull 命令,git-fetch 命令只是取得 liyuande 的开发工作的拷贝,而不是合并进来)

若要完全导入则git pull:

$ git-checkout master$git pull . lyd-incoming

3.1.12、发布工作

如何准备一个自己的版本库来供其他人下载呢?你在自己的工作目录下进行工作,这样你的版本库就被作为.git的一个子目录放在你的工作树下。你可以让其他人来远程的访问你的版本库,但是实际上这不是通常的做法。推荐的做法是创建一个公共的版本库,让它可供其他人访问,并且,当你在你的工作目录下做了很好的改动时,你可以更新到公共的版本库中。这通常称为pushing。

首先,你需要在远程机器上创建一个空的版本库来存放你的公共版本库。这个空版本库以后将通过pushing来保持更新。显然,这个版本库之需要在开始的时候创建一次。

git push使用一对命令,git-send-pack在本地机上运行,git-receive-pack在远程机上运行。这两个命令通过SSH连接来进行通讯。

你本地的版本库的git目录通常是.git,但是你的公共版本库通常还要加上你的项目名,即.git。让我们来为my-git创建这样一个版本库。首先,登入远程的机器,创建一个空目录(如果你选择HTTP作为发布方法,这个空目录需要建在web server的根目录下面):

$ mkdir my-git.git

然后运行git init-db命令将这个目录加入git版本库中,这里,因为这个版本库的名字不是通常的.git,我们需要稍微改动一下命令:

$ GIT_DIR=my-git.git git-init-db

有很多种传输方式可以发布公共版本库。这里,要确认这个目录可以通过你选择的传输方式来被其他人访问。你也需要确认你有git-receive-pack这个程序在$PATH这个路径下。

当你直接运行程序的时候,很多sshd的安装版并没有将你的shell作为登陆的shell;这就是说,如果你登陆的shell是bash 的话,被读到的是.bashrc而不是.bash_profile。确认.bashrc设置好了$PATH路径,这样你才可以运行git-receive-pack命令。

如果你打算通过HTTP来发布这个版本库,这是你就应该运行命令chmod +x my-git.git/hooks/post-update。这确认了每次你导入数据到这个版本库中,git-update-server-info能够被执行。

然后,你的“公共的版本库”可以接受你的任何改动了。回到你的本地机上,运行命令:

$ git push :/path/to/my-git.git master

该命令将你的公共版本库和你当前的版本库中指定名称的分支头部同步(这里是master)。

3.2、*TortoiseGit客户端使用

创建仓库

新建一个文件夹,然后右击,选择以此文件夹创建仓库。

弹出下面提示:

f23a8a2e4496e72d1d1e0265acedb99d.png

这个“制作纯版本库”的意思就和 git init –bare 是一样的。就是建立一个裸仓库。一般是多个开发者公用的仓库。

说是裸仓库,其实它里面是有一些配置文件的。不清楚自己想要什么的话,就别删除或者修改里面的文件。

6d71eaed61eeb1e8f3a2d4b22a163460.png

身份确认

TortoiseGit => Setting =>打开对话框,选择左侧Git选项,右侧有用户名和邮箱。

c5a5a68fc885fc4e292bd41d2aafdbcd.png

Clone远程仓库

记得url不能写错了:gitadmin@192.168.1.112:/home/gitadmin/repositories/~

提交自己机器的公钥文件:用户名.pub,自己或者让管理员修改gitosis.config文件,添加权限。

86a70dda0ded2230d3038b456e51ed1c.png

参考文献

1.百度百科

2.Ubuntu搭建Git服务器:http://blog.csdn.net/tommy_wxie/article/details/38779667

http://www.open-open.com/lib/view/open1391477731082.html

2.Git 客户端安装与配置: http://www.jb51.net/article/55438.htm

2.TortoiseGit安装配置: http://blog.csdn.net/xiaobin_hlj80/article/details/10953701

密钥解决方案:

http://www.showerlee.com/archives/1300

http://blog.163.com/wangyg_hf/blog/static/181640374201210753740961/

http://git-scm.com/book/zh/ch4-4.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值