相信大家有很多时候想将自己的本地代码同步到云端,从而分享代码,或与他人进行协同创作,或者是进行代码备份。如果您有这种需求,那么使用github将是很好的一个选择。这具体应该如何实现呢?您所需要的或许都囊括在本篇文章当中啦,快来跟着笔者一起入门github吧😄

优秀的文章
Git 常见错误 之 error: src refspec xxx does not match any / error: failed to push some refs to 简单解决方法

1. 创建仓库

你若想将本地的代码库同步至github,那么首先你需要在远程创建一个用于同步的github repository(仓库),具体流程如下:
打开github官网,登陆您自己的账号,然后点击左上角"Repositories",

然后点击"New",

然后创建一个仓库即可。如下图,本文笔者举例,在本人账号下创建一个名称为“test_github”的仓库,Description以及开源证书等等您可以根据自己的需求填写与选择即可

至此,我们的第一步创建云端仓库已经完成✅了

2. 创建免密登陆ssh证书

在后续我们将本地文件同步至云端时候,github需要认证你的真实身份,你可以选择每次都输入账户名+密码的方式,但是笔者这里推荐大家使用ssh证书的方式,这样不仅方便而且安全🔐。首先,在本地使用指令ssh-keygen创建一个证书,实现过程如下图:

上图中干了什么呢?首先,我们使用ssh-keygen开始创建证书,并且将证书的位置和名称自定义为/Users/dingding/Desktop/test_github/id_rsa_github(这里自己按需求修改即可,不需要与笔者一致,方便自己后面能查找到证书即可😓),然后一路回车即可生成证书。其中没有任何后缀的id_rsa_github就是私钥,而带着后缀.pub的便是公钥,这是一种典型的非对称加密方式(如果对此感兴趣可以参考笔者另外一篇文章对称加密与非对称加密🙋)

总之,公钥是我们需要提供给github服务器的,而私钥是咱们自己需要保存本地的,现在我们将刚刚创建好的公钥提交给github。如下图,打开github的设置界面,找到"SSH and GPG keys"选项,然后点击"New SSH key"

然后title等等自己写备注一下就好,重要的是下图中的红圈部分,这里需要复制你刚刚生成的公钥内容,也就是.pub那个文件里的内容:

然后添加后,就会发现多了一条记录了:

至此,我们便已经上传了我们的公钥给github服务器。下面为了以后的方便,我们编写本地ssh的配置文件,添加有关于github的认证配置,编辑文件~/.ssh/config,然后输入以下内容:

########## Github ##########
Host github.com
    # 服务器地址,这里是github.com
    Hostname github.com
    # 用户名,github的用户就是git
    User git
    # ssh证书私钥的位置,在本文的例子中路径如下,请根据自己的情况修改即可
    Identityfile /Users/dingding/Desktop/test_github/id_rsa_github
    # 仅允许证书登陆,为了安全,开启即可
    IdentitiesOnly yes

然后在终端中:

ssh github.com
# 返回如下结果就代表成功了:
PTY allocation request failed on channel 0
Hi DingdingLuan! You've successfully authenticated, but GitHub does not provide shell access.
Connection to github.com closed.

可以看到,github已经知道我是Dingdingluan了,这就代表成功啦,这里其实不是登陆ssh,只是github认证我们的一种方式,如果你这里没有看到你自己的用户名,那么请按照上文的步骤逐步检查一下看看哪里出了问题,或者联系笔者均可😄

3. 上传文件至云端仓库

在开始之前,笔者建议先把你的云端仓库clone下来,至于为什么这么做呢?原因有二:首先,你本地想上传的肯定是一个没有在github上传的文件夹,你需要初始化,你需要指定仓库名等等,很麻烦,但是如果你直接clone自己的这个仓库,这clone下来的文件夹里的git相关的都已经自己配好啦;其次,如果你远程仓库本来就有东西,你本地文件夹并不是从云端的文件结构开始编写新增,那么可能会导致两端匹配不同步的问题。综上所述,我们直接clone你云端的仓库到本地文件夹,然后在这个文件夹里操作即可啦,这样是最省事的😁

如下图,进入你云端的仓库(当然这里面现在除了LICENSE外空空如也),我们复制远程仓库的clone地址

将远程仓库clone到本地,并进入此文件夹内,并查看远程端是否匹配您的仓库:

git clone git@github.com:DingdingLuan/test_github.git
cd test_github
# 查看远程端信息
git remote -v

然后我们在这个文件夹内创建一个新的文件"hahaha.txt",里面输入内容"This is a test for github repository":

touch hahaha.txt
echo "This is a test for github repository" > hahaha.txt

现在我们将这个文件添加到git,并且注释这个是啥玩意(方便他人知晓你文件的作用,或者你本次更新修改了啥),然后上传至远程仓库的main分支:

# 添加到git
git add hahaha.txt
# 添加注释
git commit -m "Just upload for test hahaha.txt"
# 上传push去云端
git push origin main

上述所有操作,笔者实操截图如下:

现在😄返回你仓库的首页,看看是不是神奇的事情发生啦:

值得一提的是,如果你想上传一大堆文件,包括子文件夹等等,那么难道要一个一个git add吗?完全不需要,您只需要按照如下指令,添加所有新增即可啦,github会自己识别哪些是增量的哪些是没变的:

# 添加该文件夹下的所有,星号*就代表all的意思
git add *

如果你想删除,那么就使用git rm加对应的文件即可。请注意,无论你做了什么操作,只要是修改了,然后你想同步,一定要git commit预提交一下,要不然上传是没反应的,因为git它不认为你做了修改😓

如果你的文件里包含git下来的其他人的库,此时你git add添加的时候将不会有文件,或者报错fatal: in unpopulated submodule,那么我们需要怎么做呢?比如,你文件下包含一个子文件vim-flake8,这个库是你从别人那里git下来的,此时:

cd vim-flake8
git rm --cached .
git add .
git commit -m "upload bundle and mess"

这样就清除了他人的信息的缓存,从而可以上传了😄

至此,我们本文的实操任务就圆满完成啦🎉🎉

总结

本文通过图文结合的方式,帮助读者快速上手入门github的简单实用。请注意,本文笔者是基于Unix/Linux的操作方式,对于windows用户而言,其实区别主要在:

  • 生成ssh证书的部分
  • 配置git环境变量的方式

关于git的安装与配置环境变量,本文并没有详细展开,因为网上的教程很多很详细啦😄对于生成ssh证书,windows用户其实现在高版本的windows已经自带集成了ssh客户端,直接使用指令ssh-keygen并设置好路径即可;如果没有的话,读者可以借助类似putty这一类软件去生成即可。

还有值得一提的是,笔者建议最好不要使用坚果云等再次同步您的代码文件夹,从而进行多设备编辑,因为笔者尝试过后,当更换设备之后,git可以识别到这是两个设备,同时坚果云如果使用网桥模式(需要的同步到本地,不需要的放置云端),这就会让git认为你这个设备对代码库进行了修改,从而导致分歧O_o 很有可能两个不同坚果云同步的设备的mode不一样,也就是所谓的文件权限(github网页上手动创建的一般权限代码都是644,而咱们自己机器的一般是755,详情请参考:戳我🙋),这就会导致git diff😓所以,就像坚果云自己说的那样,他们的同步不是很适合代码,我们既然使用了github了,那么就用git来同步就好啦。读者如果还是想使用坚果云+github进行双同步,那么可以尝试把两台设备文件夹内的权限全部修改为一致😄那么可以参照文章:Github多台设备进行管理代码,笔者因为害怕云端数据遗失,并没有进行尝试,感觉可能成功率不大应该还是跟之前没啥区别😓若有兴趣读者可以试一试啦😄成功与否可以留言探讨哦

本文诣在指引读者入门并进行简单的git指令操作,更为进阶的玩法读者可以在慢慢熟悉后再去探寻其他教程(笔者其实也不太懂哈哈哈就没多写了😂)

写文章不易,如此文对您有帮助,欢迎转发收藏,转发时请注明文章出处✌️