关于Git以及Github的使用

缘起

在安装VIM插件的时候,总是遇到GitHub,虽然很早就注册了Github的账号,一直没有使用。实际上,不知道如何使用。在看到网友Ruchee GitHub做备份之后,才想到,自己也要学着如何去使用GitHub

正文

1.1. Git

Git2005Linus Torvalds 为了帮助管理 Linux(R) 内核开发而开发的一个开放源码的版本控制软件,正如所提供的文档中说的一样,”Git 是一个快速、可扩展的分布式版本控制系统,它具有极为丰富的命令集,对内部系统提供了高级操作和完全访问。

安装

系统平台:Ubuntu 12.04 LTS

命令: sudo apt-get install git-core git-gui git-doc

备注:git-core是必须安装的,git-gui是使用tcl/tk构建的GUI程序,git-doc就是git的文档

1.2. GitHub

github是一个基于git的代码托管平台,付费用户可以建私人仓库,一般的免费用户只能使用公共仓库,也就是代码要公开。对于一般人来说公共仓库就已经足够了。

如果只是需要将github上感兴趣的代码拷贝到本地,自己进行修改使用,而不打算共享发布的话,其实不申请帐号也没有关系,只需要git clone https://xxx.git,将代码到复制本地就可以了,前提是别人的代码库是公共的。

1.3. Git GitHub配置

首先去github.com上注册一个帐号,具体的注册流程就不赘述了

然后,进行全局配置,设置用户名和emailgit使用这个来验证每个提交者。除此之外github会使用这些信息来与你的github账号相联系。下面的名字应该是你真实的名字,而不是要GitHub的用户名。

git config --global user.name "Your True Name" 

git config --global user.email "Your Email Address"

备注:这里的邮件地址必须是GitHub中设置的主邮件地址,和下面使用ssh-keygen中使用的地址一致。

然后,设置SSH Keys

github使用ssh keys来确保你的电脑与github的连接有安全性,所以需要在本地创建验证用的秘钥,设置过程很简单,步骤如下:

步骤一:检查已有的ssh keys$HOME/.ssh/文件下是否存在xxrsa这样的文件

如果没有这样的文件或者目录。(No such file or directory)则跳到步骤三。否则继续。

步骤二:备份已有的ssh keys

步骤三:产生一个新的 ssh keyssh-keygen -t rsa -C '[email protected]'。注意邮箱的地址根据个人的情况而定。生成过程中需要输入passphrase(用来验证授权),生成结束后,终端输出key fingerprintkey's randomart image,也不知道有什么作用。

最后,会在$HOME/.ssh/生成这样的两个文件(如果生成使用的默认的文件名,当然可以修改为其他):id_rsaid_rsa.pub(公钥)

步骤四:在gitHub里单击账户设置Account Settings。点击SSH 公钥SSH Keys,点击添加另一个公钥。打开前面生成的id_rsa.pub 文件。(注意不要编辑,添加空格或者换行。)然后把里面的内容复制粘贴到下面的key输入栏中。备注:复制的时候要一点不差,一个符号一个空格都可能会导致密钥不能使用,其中

Permission denied (publickey).

fatal: The remote end hung up unexpectedly

就是因为不能识别密钥而没有权限导致的。

步骤五:测试连接是否畅通,可以使用如下的命令:ssh -T [email protected] 或者ssh -V [email protected]

此时,出现如下的问题(Ubuntu中):

ssh: connect to host github.com port 22: Connection timed out

google上搜使用ssh连接github,出现timeout,找到了答案,ssh阻塞了22端口。解决方案也很简单,修改ssh的配置文件。关于修改配置,存在两种解决方法,一种是/etc/ssh/ssh_config中修改全局配置,一种是在用户主目录下.ssh/中添加配置文件,这里我选择的后者。

cd ~/.ssh/

touch config

将如下内容添加到config中(当然,在全局文件中也是添加相同的内容):

Host github.com  
User git  
Hostname ssh.github.com 
PreferredAuthentications publickey  
IdentityFile ~/.ssh/id_rsa 
Port 443

备注:参考[4]介绍防火墙和ISP不会阻塞443端口。

在修改ssh的配置文件(configssh_config)之后,键入ssh -T github.com,可需要输入步骤三中创建的passphrase。注意:在输入passphrase的时候,不要使用外接键盘中小键盘上数字健,我试了好几次,就是不识别。

在看到如下的输出则说明连接成功了:

Hi yourname! You've successfully authenticated, but GitHub does not provide shell access.

此时已经将GitGitHub设置完成了。

备注:在参考[1]中看到一个设置GitHub的指令环,Account Settings->Account Admin,这里在我GitHub上没有看到Account Admin,所有就没做任何处理。

1.4. GitHub使用

利用github来管理自己的项目和参与开源工作了,大体上使用git分为三种方式,介绍如下。

1.4.1. 管理自己的项目

这种情况是自己在本地有一些代码,需要利用 github 来管理自己的项目,可以按照下面的步骤进行。

1、建立仓库

在需要建立项目的文件夹中,使用git init 进行仓库的建立。完成后,可以看到文件家中多了一个 .git 隐藏目录。

2、添加文件

使用 git add . 来进行初始文件的添加。这里 表示将文件夹下所有的文件都添加进去,我们也可以指定文件进行添加。

3、提交文件

使用 git -m commit  -m 'comment' 提交,可以将编辑的内容进行提交。

通过 git show 可以看到项目的一些状态。

这是代码已经在本地管理了,但是本地管理完全体现不出git的优势。

1.4.2. 利用github托管自己的项目

1、如果需要将自己的项目托管在github.com上,首先需要创建项目。登录后进入github.com首页,在 Dashboard 中选择 Create New Repository,填入相关信息后,项目就创建成功了。

2创建后之后.会跳转到一个页面.其中有指示接下来该怎么做的

1.4.3. Fork别人的项目

有些时候你发现自己想要为别人的项目做贡献.或者希望来使用别人的项目做为自己的起点.也就称之为Fork

在你想fork的项目的首页.找到fork按钮,点击然后等待.

接下来设置本地仓库,首先cd本地的工作目录下。

A . 克隆项目.

$ git clone [email protected]:username/projectname.git

B. 远程配置.

当你克隆了一个项目之后.它的remote选项默认origin,指的是在githubfork.而不是在原本项目的仓库.为了跟踪原本的仓库,需要添加upstream的选项.

$cd projectname

$git remote add upstream git://github.com/username/projectname.git

$git fetch upstream

接下来.你要做的就是.

A.推送提交

一旦做出某些提交,可能想要将其推送到githubfork的项目库.这和平常的项目一样。

$git push origin master

接收upstream 变更.

如果fork的原项目的代码库变更了,可以使用如下命令来更新本地的仓库.

$ git fetch upstream

$ git merge upstream/master

1.5. 常用的git命令

关于Git的命令具体请参见Git手册,就个人使用并搭建了SVN服务器的简单经历而言,版本控制库之间的命令,有些命令是相似的。对于命令行的学习,个人认为没什么捷径,多用用,不记得的就man git 查看一下,常用命令选项就是init,add,commit, push,pull,log这类的,用熟了就记得了。

git init # 初始化本地Git版本库

git add  # 暂存文件,如果使用.表示当前目录及其子目录

git commit -m first commit” 提交,-m选项后跟内容为提交所用的注释

git commit -a -m "concerate message"  #git addgit commit用一个指令完成

git remote -v # 查看当前项目远程连接的是哪个版本库地址

git push # 将本地修该同步到github(远程)的代码库中

git push origin master # 将本地项目提交到远程版本库

git fetch origin # 取得远程更新(到origin/master),但还没有合并

git merge origin/master # 把更新的内容(origin/master)合并到本地分支(master

git pull #更新本地的代码库,pull指令其实包含了fetch(將变更复制回來)以及merge(合并)操作例如,git pull git://github.com/tom/test.git

git pull origin master # 相当于fetchmerge的合并,但分步操作更保险

另外版本控制系統的branch功能也很有意思,若同时修改bug,又要加入新功能,可以fork出一个branch:一个专门修bug,一个专门加入新功能,等到稳定后再merge(合并)

git branch bug_fix  # 建立branch,名为bug_fix

git checkout bug_fix  # 切换到bug_fix

git checkout master  #切换到主要的repo

git log   #可以查看每次commit的改变 

git diff   #可以查看最近一次改变的內容,加上参数可以看其它的改变并互相比较 

git show   #可以看某次的变更   

git status  # 查看目前工作树的状态

1.5.1. 一些文件介绍

.gitignore文件

.gitignore,顾名思义,就是git需要忽略的文件,该文件很重要并且很实用。一般,写完代码后会执行编译、调试等操作,这期间会产生很多中间文件和可执行文件,这些都不是代码文件,是不需要git来管理的,用git add -A就会把他们都加进去,而手动添加又太麻烦了,此时就需要编写.gitignore设置忽略的文件。例如,c#的项目中.gitignore:

bin

*.suo

obj

binobj是编译目录,里面都不是源代码,忽略;suo文件是vs2010的配置文件,不需要。这样就可以放心的git add -A了。

tag

可以创建一个tag来设定软件开发中的关键时期,比如版本号更新的时候可以建一个“v2.0”“v3.1”之类的标签,这样在以后回顾的时候会比较方便。tag的使用很简单,主要操作有:查看tag、创建tag、验证tag以及共享tag

列出所有tag :git tag 

列出的tag是按字母排序的,和创建时间没关系。通过添加限定查看某些tag

git tag -l v1.*

这样就只会列出1.几的版本。

创建轻量级tag: git tag v1.0

这样创建的tag没有附带其他信息,与之相应的是带信息的tag

git tag -a v1.0 -m 'first version'

根据名称删除taggit tag -d v1.0

很简单,知道tag名称后:

在执行git push的时候,tag是不会上传到服务器的,共享这些tag需要添加--tags选项

后记

花了好长时间来处理这篇文档,在处理ssh time out的问题上,别人的些github的使用居然都忽略了这个问题,话说,为什么我就遇到了这个问题,回想起来,我总能遇到一些奇怪的问题,不知为何。

参考资料

[1] GitHub使用指南!(ubuntu) 

[2] gitgithububuntu下的使用

[3] UbuntuGitHub的使用

[4] linux解决ssh time out 问题

你可能感兴趣的:(github,git,ubuntu,ssh,安装和使用)