GitHub in Linux/Ubuntu的配置安装

  • 最近萌发了使用github的冲动
  • 尽管现阶段最大的好处还是将代码保存到了远程
  • 因为感觉并不会用到分支等等其他功能的样子

系统版本

$ cat /proc/version
Linux version 4.4.0-57-generic (buildd@lgw01-54) (gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.4) ) #78-Ubuntu SMP Fri Dec 9 23:50:32 UTC 2016
$  lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 16.04.1 LTS
Release:    16.04
Codename:   xenial

安装git

$ sudo apt-get install git
[sudo] username 的密码:
正在读取软件包列表... 完成
正在分析软件包的依赖关系树       
正在读取状态信息... 完成       
git 已经是最新版 (1:2.7.4-0ubuntu1)。
升级了 0 个软件包,新安装了 0 个软件包,要卸载 0 个软件包,有 205 个软件包未被升级。

生成ssh密钥

$ ssh-keygen -t rsa -C "your_email@email.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/home/username/.ssh/id_rsa): gitkey
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in gitkey.
Your public key has been saved in gitkey.pub.
The key fingerprint is:
SHA256:YbbASU/RttVk7K4Ks/C0v/y+V7HGIYHoJEw1weZuqJw "your_email@email.com"
The key's randomart image is:
"an image made up with characters"
  • 这里我生成的key取名为gitkey
    • 这样在你用户的根目录(/home/username)下会有一个gitkey.pub的文本文件,里面的内热就是公钥,需要用来添加到你在github网站上的账户里面
    • 还会有一个gitkey的文件,也就是私钥
    • 如果在“Enter passphrase (empty for no passphrase): ”输入了一个短语,这个是用来对私钥加密的,即访问gitkey文件的时候会提示你输入这个密码。显然我是加了密的,所有才会提示“Enter same passphrase again: ”
    • 然后需要把这两个文件cp到/home/username/.ssh/目录下,终端直接操作(为啥咧?因为这样才能让ssh找到。其实还是因为我“擅自”输入了文件名导致ssh没有将密钥直接生成在其默认的目录下)
  • 如果直接一路按回车下来的化,会简单很多
    • 默认会在/home/username/.ssh/目录下生成id_rsa和id_rsa.pub文件,即私钥和公钥
    • 哎找不到这个目录?隐藏的啦( 即前缀了一个 . )。直接在终端中输入路径访问就可以

设置github账户

  • 到github网站上登录你的帐号
  • settings 里的 SSH and GPG keys
  • New SSH key (一个绿色的按钮)
  • Title即标题,最好取一个和当前终端设备(系统)相关的标题方便管理,比如我在window下的密钥起名为“GitHub for windows”,在这里就取名为“GitHub for Linux/Ubuntu”
  • Key即公钥,也就是前文中gitkey.pub(默认版:/home/username/.ssh/id_rsa.pub)的内容

测试ssh密钥

$ ssh -T git@github.com
  • 若出现Permission denied (publickey).
    • 个人的解决方法是把这gitkey和gitkey.pub这两个文件cp到了/home/username/.ssh/目录下
    • 如果生成密钥那一步是一路回车下来的,就没发生这个问题
  • 若出现Hi YourGitHubName! You’ve successfully authenticated, but GitHub does not provide shell access.
    • 就可以了

简单使用git

举一个简单的例子

1.首先在github网站上创建一个repository,起名叫test

  • 空空如也但是有提示
Quick setup — if you’ve done this kind of thing before
or  | HTTPS | SSH | git@github.com:username/test.git
  • 即使用git通过ssh来访问的时候利用git@github.com:YourGitHubName/test.git这个url来访问你建立的repository

2.终端移动到你的新项目目录下

$ pwd
/home/username/文档/test
$ ls
test  test.c

3.使用git init初始化git仓库

$ git init
初始化空的 Git 仓库于 /home/username/文档/test/.git/

4.使用git add .将所有改动添加到本地仓库

$ git add .

5.使用git commit -m “commit instruction”来编写提交说明

$ git commit -m "firt commit"
[master (根提交) 2c5bcb7] firt commit
 2 files changed, 7 insertions(+)
 create mode 100755 test
 create mode 100644 test.c

6.使用git remote add origin git@github.com:YourGitHubName/test.git

  • 尽管还不知道为什么,不过不这样干没办法提交。目前个人的理解是将远程的repository映射到本地的一个origin上,通过origin进行上传。日后有更准确的理解会修正。

7.使用git push origin master上传到远程上

$ git push origin master
对象计数中: 4, 完成.
Delta compression using up to 4 threads.
压缩对象中: 100% (4/4), 完成.
写入对象中: 100% (4/4), 2.61 KiB | 0 bytes/s, 完成.
Total 4 (delta 0), reused 0 (delta 0)
To git@github.com:YourGitHubName/test.git
 * [new branch]      master -> master

8.稍作修改

$ echo asd > asd.txt
$ ls
asd.txt  test  test.c

9.提交更新的版本

$ git add .
$ git commit -m "second commit"
[master c314f60] second commit
 1 file changed, 1 insertion(+)
 create mode 100644 asd.txt
$ git push origin master
对象计数中: 3, 完成.
Delta compression using up to 4 threads.
压缩对象中: 100% (2/2), 完成.
写入对象中: 100% (3/3), 297 bytes | 0 bytes/s, 完成.
Total 3 (delta 0), reused 0 (delta 0)
To git@github.com:YourGitHubName/test.git
   2c5bcb7..c314f60  master -> master

10.下载项目到本地(我这里先删掉了原本的test目录)

$ cd ..
$ rm -r test
rm:是否删除有写保护的普通文件 'test/.git/objects/3d/ede79373fd15383d243b9a99f2340111ef2242'? y
rm:是否删除有写保护的普通文件 'test/.git/objects/c3/14f60b58bcd36894c41e37d62b1c228b19021f'? y
rm:是否删除有写保护的普通文件 'test/.git/objects/87/fae94b03488f770ed94496418ff75531904612'? y
rm:是否删除有写保护的普通文件 'test/.git/objects/af/1fa17d50347d23f2a0562b31dca44748ab5858'? y
rm:是否删除有写保护的普通文件 'test/.git/objects/d7/2af314604e3b98e5c108efeb4815c64d2e267b'? y
rm:是否删除有写保护的普通文件 'test/.git/objects/73/9735de9ca4e5ad57f2353ae65a858c4142319b'? y
rm:是否删除有写保护的普通文件 'test/.git/objects/2c/5bcb7a3b3c768d1007b3f54c33db405fd2f8f0'? y
$ cd test
bash: cd: test: 没有那个文件或目录
$ git clone git@github.com:YourGitHubName/test.git
正克隆到 'test'...
remote: Counting objects: 7, done.
remote: Compressing objects: 100% (6/6), done.
remote: Total 7 (delta 0), reused 7 (delta 0), pack-reused 0
接收对象中: 100% (7/7), 完成.
检查连接... 完成。
$ cd test
$ ls
asd.txt  test  test.c

更多git的使用


git撤回commit
  • 某次手滑直接commit一个带有私人key的版本

    1. git log 查看commit历史,可以看到每次commit版本的hash值,即commit id
    2. git reset [option] [commit id]
      • git reset –mixed [commit id]:仅恢复index,不修改work directory中的文件,所有相对于恢复后的版本发生的改变为unstaged状态,即未跟踪
      • git reset –soft [commit]:仅恢复index,不修改work directory中的文件,但相对修改的文件为Changes to be committed状态
      • git reset –hard [commit id]:恢复index和work directory,即完全回退到之前的版本
    3. git push origin master –force将回退操作同步到远程。

  • wait for more
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值