GitHub in Linux/Ubuntu的配置安装

本文介绍了如何在Ubuntu系统上配置并使用GitHub与Git,包括安装Git、生成SSH密钥、设置GitHub账户、基本的Git命令及工作流程。适合初次接触版本控制系统的开发者。
  • 最近萌发了使用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
robot@YQ:~$ sudo apt update sudo apt install nvidia-container-toolkit sudo systemctl restart docker 命中:1 https://mirrors.aliyun.com/docker-ce/linux/ubuntu jammy InRelease 忽略:2 https://download.docker.com/linux/ubuntu jammy InRelease 忽略:3 https://nvidia.github.io/libnvidia-container/stable/deb/amd64 InRelease 命中:4 http://security.ubuntu.com/ubuntu jammy-security InRelease 忽略:5 https://nvidia.github.io/libnvidia-container/stable/ubuntu18.04/amd64 InRelease 命中:6 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy InRelease 命中:7 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-updates InRelease 命中:8 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-backports InRelease 忽略:3 https://nvidia.github.io/libnvidia-container/stable/deb/amd64 InRelease 忽略:5 https://nvidia.github.io/libnvidia-container/stable/ubuntu18.04/amd64 InRelease 命中:2 https://download.docker.com/linux/ubuntu jammy InRelease 错误:2 https://download.docker.com/linux/ubuntu jammy InRelease 由于没有公钥,无法验证下列签名: NO_PUBKEY 7EA0A9C3F273FCD8 忽略:3 https://nvidia.github.io/libnvidia-container/stable/deb/amd64 InRelease 忽略:5 https://nvidia.github.io/libnvidia-container/stable/ubuntu18.04/amd64 InRelease 错误:3 https://nvidia.github.io/libnvidia-container/stable/deb/amd64 InRelease Could not handshake: Error in the pull function. [IP: 185.199.108.153 443] 错误:5 https://nvidia.github.io/libnvidia-container/stable/ubuntu18.04/amd64 InRelease Could not handshake: Error in the pull function. [IP: 185.199.108.153 443] 正在读取软件包列表... 完成 正在分析软件包的依赖关系树... 完成 正在读取状态信息... 完成 有 244 个软件包可以升级。请执行 ‘apt list --upgradable’ 来查看它们。 W: https://mirrors.aliyun.com/docker-ce/linux/ubuntu/dists/jammy/InRelease: 密钥存储在过时的 trusted.gpg 密钥环中(/etc/apt/trusted.gpg),请参见 apt-key(8) 的 DEPRECATION 一节以了解详情。 W: 校验数字签名时出错。此仓库未被更新,所以仍然使用此前的索引文件。GPG 错误:https://download.docker.com/linux/ubuntu jammy InRelease: 由于没有公钥,无法验证下列签名: NO_PUBKEY 7EA0A9C3F273FCD8 W: 无法下载 https://download.docker.com/linux/ubuntu/dists/jammy/InRelease 由于没有公钥,无法验证下列签名: NO_PUBKEY 7EA0A9C3F273FCD8 W: 无法下载 https://nvidia.github.io/libnvidia-container/stable/deb/amd64/InRelease Could not handshake: Error in the pull function. [IP: 185.199.108.153 443] W: 无法下载 https://nvidia.github.io/libnvidia-container/stable/ubuntu18.04/amd64/InRelease Could not handshake: Error in the pull function. [IP: 185.199.108.153 443] W: 部分索引文件下载失败。如果忽略它们,那将转而使用旧的索引文件。 正在读取软件包列表... 完成 正在分析软件包的依赖关系树... 完成 正在读取状态信息... 完成 nvidia-container-toolkit 已经是最新版 (1.17.8-1)。 下列软件包是自动安装的并且现在不需要了: docker-buildx-plugin docker-ce-rootless-extras docker-compose-plugin libslirp0 pigz slirp4netns 使用'sudo apt autoremove'来卸载它(它们)。 升级了 0 个软件包,新安装了 0 个软件包,要卸载 0 个软件包,有 244 个软件包未被升级。 Failed to restart docker.service: Unit docker.service not found.
07-21
### 三级标题:解决 `nvidia-docker` 安装时的仓库签名错误和网络连接问题 在安装 `nvidia-docker` 或 `nvidia-container-toolkit` 的过程中,用户可能会遇到仓库签名错误(如 `NO_PUBKEY`)或因网络问题导致的源列表加载失败。这些问题通常会影响软件包的正常安装,但可以通过调整密钥管理和手动配置 APT 源的方式解决。 #### 仓库签名错误的解决 安装过程中若出现 `NO_PUBKEY` 错误,例如提示 `NO_PUBKEY 6ED91CA3AC1160CD`,说明系统缺少用于验证 NVIDIA 软件源的 GPG 公钥。可以通过以下命令手动获取并添加缺失的密钥: ```bash sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 6ED91CA3AC1160CD ``` 该命令将从 Ubuntu 官方密钥服务器获取指定的 GPG 密钥,并添加到 APT 的信任密钥库中,从而允许系统验证对应仓库的签名[^5]。 此外,为避免重复操作和密钥冲突,可以先清理旧的 NVIDIA 容器工具密钥: ```bash sudo rm /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg ``` 随后重新下载并安装新的密钥和仓库配置: ```bash distribution=$(. /etc/os-release;echo $ID$VERSION_ID) curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | \ sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \ sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list ``` 此过程确保了仓库源的签名验证机制正常工作,避免因密钥缺失导致的更新失败[^3]。 #### 网络连接问题的解决 某些用户在使用默认的 NVIDIA 源地址时可能会遇到网络连接超时或无法访问的问题。为解决此类问题,可以尝试更换为国内镜像源,或手动指定一个支持的 Ubuntu 版本作为替代源。 若系统当前使用的 Ubuntu 版本未被 NVIDIA 官方支持(如 Ubuntu 22.10 或非 LTS 版本),可以手动将 `distribution` 变量设置为一个 NVIDIA 支持的版本,例如 `ubuntu2204` 或 `ubuntu2004`: ```bash distribution="ubuntu2204" curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | \ sudo tee /etc/apt/sources.list.d/nvidia-docker.list ``` 完成源配置后,更新 APT 缓存并安装 `nvidia-docker2`: ```bash sudo apt update sudo apt install nvidia-docker2 sudo systemctl restart docker ``` 通过手动指定支持的 Ubuntu 版本,可以绕过因系统版本不被支持而导致的仓库连接失败问题[^1]。 #### 验证安装 安装完成后,可以通过运行测试容器来验证 NVIDIA 容器工具是否正常工作: ```bash docker run --rm --gpus all nvidia/cuda:11.6.0-base nvidia-smi ``` 若命令输出了当前系统的 GPU 信息,则说明配置成功,Docker 已具备 GPU 支持。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值