linux下git的安装和使用

linux下git的安装和使用

最近在使用github,感觉不错。在windows下,可使用github提供的windows客户端(http://windows.github.com/)。很傻瓜,很方便。如何使用?详见:http://www.cr173.com/html/15618_1.html。(有图是王道)最近发现,在公司电脑上安装github的windows客户端时,可能由于公司网络限速和限流量限得太死,怎么也安装不成功。在家的github windows的图形客户端的同步也经常出问题。没办法,也只能通过文本界面来连接github了。如果已在windows系统中成功安装github的客户端,则除了可使用图形客户端外,还可使用github bash这个文本客户端。在我电脑上,当图形客户端同步出现问题时,文客户端还是能同步成功的。如果安装不上github的客户端,还可安装其他的git bash来连接github,如msysgit (http://msysgit.github.io/)等。因为以上软件都是以git为基础的,所以语法与linux使用的命令相同。

在linux下我仅使用了文本界面,所以安装了个文本形式的git客户来连接github。

1. 安装git

我用的是centos系统,在使用yum install git时,系统提示没有找到git包。所以,仅能通过以下方法来安装git。方法详见:http://www.cnblogs.com/Neddy/archive/2011/02/28/1967548.html。以上方法中有一个问题:方法中给出的git的下载源http://www.codemonkey.org.uk/projects/git-snapshots/git/git-latest.tar.gz似乎无效了,于是,我在网上的这里下载了个git的最新安装包,安装到了centos上。Linux下git的官方网址为:http://git-scm.com/download,可能因为我网慢打不开,不知道读者您那里如何。如果打不开,可以在网上其他地方找找安装包,应该可以找到的。

2. 使用git连接github

使用git连接github时,需要将linux下产生的一个ssh公钥放到github上。具体步骤详见:http://blog.sina.com.cn/s/blog_6b706e15010199p1.html。主要命令有:

1

ssh-keygen -t rsa -C"mail@mail.com"

然后系统提示输入文件保存位置等信息,连续敲三次回车即可,生成的SSH key文件保存在中~/.ssh/id_rsa.pub文件中。

用文本编辑工具打开该文件,在linux下可以用cat命令显示id_rsa.pub中的内容(cat  ~/.ssh/id_rsa.pub),让后复制其内容。

接着拷贝.ssh/id_rsa.pub文件内的所以内容,将它粘帖到github帐号管理中的添加SSH key界面中。

注意,使用vim读取git_home/.ssh/id_rsa.pub中的公钥内容时,可能会有较多的空格和换行,复制到github网站上时必需删除。所以建议使用cat来读取ssh公钥。将ssh公钥成功加入github后,可使用命令ssh -T git@github.com来验证是否成功。如果出现象:hi xxx. You've successfully authenticated, but GitHub does not provide shell access.则说明连接成功。

非常不幸,我未能连接成功。可使用命令ssh -Tv git@github.com来查找failure的原因。通过详细的debug过程,我发现象我把自己的ssh密钥信息放到了/home/admin/.ssh/下,而测试时使用的账户是root,寻找ssh密钥的路径为root/.ssh,所以permission denied的啦。su到admin下,就可以连接成功啦~~

3. 使用git与github管理代码

3.1 新建一个repository

这里就使用github官网上的教程吧。请保证git的版本至少为1.7.10,否则可能无法成功。详细如何使用,请参见:https://help.github.com/articles/set-up-git。linux下无法新建一个repo,只能对github中已有的repo进行修改。所以,当要新建一个repo时,必须在github.com上新建,再通过linux下的git向此repo中新添内容。

3.2 修改repo中的代码

github的官网上也有修改repo代码的教程。详情请参见:https://help.github.com/articles/fork-a-repo。简要步骤如下:

$git clone https://github.com/username/Spoon-Knife.git

$cd Spoon-Knife

$git add filename.py#添加文件到版本库

$git commit-m'add filename.py to src'#提交,产生版本记录,注意代码依然在本地

$vim README.md#修改Spoon-Knife中的README.md文件内容

$git commit-m'modify the README.md'#提交,产生版本记录,注意代码依然在本地

$git [remote] rm filename1.py#删除repo中的filename1.py文件

$git commit-m'delete filename1.py'#提交,产生版本记录,注意代码依然在本地

$git push origin#将修改提交到github上

3.3 常用git命令

git help                                 #可查看git的常用命令

git config--globaluser.name"Your Name Here"#设置commit的署名

git config--globaluser.email"your_email@example.com"#设置commit的email

git config [--local|--global|--system] --list/-l          #查看本地的global信息

git config [--local|--global|--system] --unset[-all] user.name  #删除user.name信息。如果user.name对应多个值,可用unset-all来删除

git remote add XXX https://github.com/username/repo_name.git    #设置github的连接

git clone git://github.com/your_account/aimed_repo.git       #复制一个repo到本地

git remote -v                               #查看本地设置的url连接信息

git status                                 #查看当前工作的

branch git branch                             #查看本地所有的

branch git branch -a                           #查看远程的所有分支

git branch -d branch_name                         #删除本地branch_name这一分支

git push origin --delete branch_name                   #删除名为branch_name的远程分支

git checkout branch_name                         #切换到名为branch_name的分支上

git chechout -b branch_name                        #在本地新建一个名为branch_nam的分支

git diff test_branch_name                         #查看当前branch与test_branch_name中代码的区别

git mv filename newfilename                      #文件重命名

git push XXX branch_name                        #上传指定的branch到远端

git pull                                  #将远程上的版本与本地版本进行合并,相当于get fetch + git merge

git reset --hard                             #将刚才进行的git pull所进行的操作取消,恢复本地版本合并前的原貌

4. 如何删除github上的repository

github页面上删除repo的功能比较隐蔽,得在这里表一表。比如,想删除了一个名为python的repo。则需先点击进入“python”,单击“Settings”,找到“Delete this repository”,确认删除即可。注意,github上的repo删除后就不能恢复了哦~~

5. git clone/push时出现错误提示:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed while accessing ...

这是由于ssl认证出问题引起的错误。有两种简单的解决方法:

1. 使用命令,成功执行后,便可正常使用git clone和git push了

git config --global http.sslVerifyfalse

2. 使用命令,但每次clone 和 push时都需要带上env的部分。

env GIT_SSL_NO_VERIFY=truegit clone https://github.com/XXXX/xxxxx.git

6. git push时出现错误non-fast-forward时怎么办?(来自:http://blog.csdn.net/chain2012/article/details/7476493

当要push代码到git时,出现提示:

error:failed to push some refs to ...

Dealing with “non-fast-forward” errors

From time to time you may encounter this error while pushing:

$ git push origin master

To ../remote/

! [rejected]        master -> master (non-fast forward)

error: failed to push some refs to '../remote/'

To prevent you from losing history, non-fast-forward updates were rejected

Merge the remote changes before pushing again.  See the 'non-fast forward'

section of 'git push --help' for details.

This error can be a bit overwhelming at first, do not fear. Simply put, git cannot make the change on the remote without losing commits, so it refuses the push. Usually this is caused by another user pushing to the same branch. You can remedy this by fetching and merging the remote branch, or using pull to perform both at once.

In other cases this error is a result of destructive changes made locally by using commands like git commit --amend or git rebase. While you can override the remote by adding --force to the push command, you should only do so if you are absolutely certain this is what you want to do. Force-pushes can cause issues for other users that have fetched the remote branch, and is considered bad practice. When in doubt, don’t force-push.

问题(Non-fast-forward)的出现原因在于:git仓库中已经有一部分代码,所以它不允许你直接把你的代码覆盖上去。于是你有2个选择方式:

1,强推,即利用强覆盖方式用你本地的代码替代git仓库内的内容

git push -f

2,先把git的东西fetch到你本地然后merge后再push

$ git fetch

$ git merge

这2句命令等价于

$ git pull

可是,这时候又出现了如下的问题:

上面出现的 [branch "master"]是需要明确(.git/config)如下的内容

[branch "master"]

remote = origin

merge = refs/heads/master

这等于告诉git2件事:

1,当你处于master branch, 默认的remote就是origin。

2,当你在master branch上使用git pull时,没有指定remote和branch,那么git就会采用默认的remote(也就是origin)来merge在master branch上所有的改变

如果不想或者不会编辑config文件的话,可以在bush上输入如下命令行:

$ git config branch.master.remote origin

$ git config branch.master.merge refs/heads/master

之后再重新git pull下。最后git push你的代码吧。it works now~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容