写这个主要是打算自己用的,里边很多东西都是只要我自己看得懂,但是用了两个星期发现真是越用越简单,越用越好用,私以为得到了学习使用git的精髓,觉得按照自己这个顺序用起来还是很舒服的.
其实一开始这里边只有一点,用着用着就慢慢变多了.
在这个博客里放了很多链接,这些都是当时我遇到问题搜一下通过链接里博客的内容解决了的,私以为非常好用,也很感谢写这些博客的博主,帮我节省了很多时间.
这个博客目前针对以下应用场景可能效果更佳:
注:这些话是为了让大家快速看懂,可能不规范,但是很易懂,用到后边会自己修正过来的.
git是本地的代码仓库,存代码的,只要提交就会保留历史版本,也可以开分支(目前可以理解为复制文件夹,改个名字,从里边改代码),在git里切换分支(就像切换文件夹)只需要输入指令,比鼠标点起来快.也可以退回到之前写过的版本,也是用指令,用几次就比鼠标用着舒服了(亲测有效).
github是远程的代码仓库,相当于又搞了一台电脑,复制了本地那个代码仓库文件夹里的信息,这样大家只要都连到github上(像是个公用的电脑),就能获得里边的文件,修改文件(相当于一个共享文件夹,可以和n个人共享),
gitlab这个"大共享文件夹"暴漏在大街上,路过的人都能看到它,都能下载里边的东西.gitlab也是给大的共享文件夹,不过在家里,只有家里人能看到,能往文件夹里放东西.
gitee(码云)和github一样,github是全球的,gitee是国内的.
linux
在很久很久以前,操作系统主要是unix,像是windows一样,它是要收费的,这时候,一个大佬Linus Benedict Torvalds站了出来,做了个仿unix系统的操作系统放在网上,大家用起来发现这个不仅免费,还比较好用,于是很多人开始给linux贡献代码.
在linux系统里,很多暂时不需要的软件都不会预装,这就导致了有时候装一个软件,这个软件依赖另外几个软件或者是环境,所以有时候装软件发现装不上,或者是装上了跑不起来,就是因为这个. linux设计之初就是给专业人士用的比如说程序员用的, 它默认你会根据提示自己再去配置相应的环境,所以说新手用起来可能比较懵逼. 好在后边又有些大佬觉得这样不方便,于是乎给liunx增加了很多方便的安装方式又加了点界面.这使得像我这样的新手程序员也能快速用得起linux类系统.
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CXgKazSt-1662882783463)(https://my-blogs-imgs-1312546167.cos.ap-nanjing.myqcloud.com//f703738da9773912731df842f8198618367ae2de)]
shell
在linux刚刚盛行的时候,显示屏一般就是用来显示文字,那时候没什么显卡,带视频都费劲,变成啥的就是在黑乎乎的命令行里边写的,环境差不多像是windows的cmd,在linux里的cmd叫做shell,大家当时用这个写代码,执行指令等待
git
由于linux太好用了,很多人给linus提意见,帮他改代码,但是很多代码只有细微处和他的有差异,当时每天花时间区找代码哪里不一样,浪费很多时间,还要提前时不时的备份代码以防改错了.于是乎大佬linus想到了找个类似于git这样的版本管理工具,但是那个时候git还没出来.linux大佬试了一下当时的工具,发现不好用,还收费.大佬不愧是大佬,根据自己的需求,linus大佬又给自己手写了个git
git在设计出来的时候在linux系统里的shell上运行,所以操作延续了linux系统用指令的风格(主要是那时候也没啥界面能做,还是指令方便),放到现在来看,竟然还是用指令方便,绝了~
当从linux切换到windows的时候,git之前写好的shell还可以用,只不过用一个应用程序封装出一个shell,于是就可以在windows里也使用shell了(敲指令的那种).
右键单击git bash here 就可以打开运行了,打开这个,就可以像linus在linux里当初用git那样用了.
ssh
平时登录多是要输入密码,输入验证码啥的,ssh相当于一把钥匙和锁,每次登录电脑自动把钥匙插进锁里,对的上就登陆成功,这样就可以不输入密码了,很是舒服.
github就支持用ssh免密登录,所以说一般会先配置一下这个,这样就不用输入密码了.
github为什么容易被墙
因为github上如果有人发点pornhub里边的东西,大家也是能下载下来的(虽然没人这么做),内容不受国内管控,所以容易被墙,但是github对程序猿真的很重要,所以说有时候也能访问的上.
https://git-scm.com/downloads
去官网,非常方便下载,记得把添加到环境变量勾选上
sudo apt update
sudo apt install git
https://blog.csdn.net/jamieblue1/article/details/98481846
https://cloud.tencent.com/developer/article/1751149
https://blog.csdn.net/selous/article/details/77583933
一般linux系统下有用户的概念,比如说root用户和普通用户不是一个用户,root的ssh文件也放在~/.ssh
目录下,和user的~/ssh
是不一样的目录.
我一般喜欢上来就sudo -s
这样敲命令就不用担心管理员的问题,但是这样在有一次clone的时候发现出现了这样的问题:
如何解决 [email protected] permission denied (publickey). fatal could not read from remote repository - 知乎 (zhihu.com)
搜了一下发现是root用户没有ssh公钥,所以下载不了,
解决方式很简单,按照上述普通用户的来一遍,把root的ssh公钥再加到github里就好了
一开始用这几个命令是基本上够用的,后边遇到问题顺着自然就解决了.
git pull 命令 | 菜鸟教程 (runoob.com)
大致分三步,添加,提交,把本地分支传到指定远程地址的指定分支
git init
git add .
git commit -m "随便输入点什么"
git push
git remote add origin "xxx.git"
git push origin master:center_node
比如说我在本机上上传了,在虚拟机上下载,可以这样
先建仓库后同步
git init
git remote add origin "xxx.git"
#git pull <远程主机名> <远程分支名>:<本地分支名>
git pull origin ubuntu:master
如果是在虚拟机上,可能一下子切换分支会卡,重新加载一下或者是等一下就好了
先同步再选择仓库
也可以是切换分支
git clone "xx"
cd xx
git checkout ubuntu
大概这几个用法就可以满足项目上传下载,合并分支,基本上就够我满足绝大部分使用需求了
[Git如何版本回退? - 腾讯云开发者社区-腾讯云 (tencent.com)](https://cloud.tencent.com/developer/article/1483845#:~:text=每个记录都有一个与之对应的commit id,所以可以使用命令git reset --hard,commit_id来回退到相应的版本。 除此之卡,在Git中,使用HEAD来代表当前版本,如需回退到前一个版本,可以使用命令git reset --hard HEAD^,前两个版本则用HEAD~2表示,以此类推。)
有时候手残或者是脑子抽抽了,一顿乱写,发现把代码改废了,这个时候可以把版本往前退一下
git log --oneline
#这里就会显示每次提交的信息和版本号
git reset --hard 版本号
会这么一手,就很舒服,后边用git再折腾的时候,就不担心把原来的代码玩坏了,因为可以随意重置.
日常使用的时候,一开始加不加.gitignore都没啥事,但是,后边多用几次发现还是挺难受的.
比如说我在ubuntu上边运行一个pycharm,在windows下运行一个pycharm,树莓派上边运行一个pycharm,这三个里边都有一个虚拟环境(有时候虚拟环境还比较大),还有.idea的配置文件,这个时候,如果我无脑把所有东西都push过去,再下载,就会比较难受,pull下来之后肯能还会破坏掉原来的虚拟环境
在git里,其实是可以选择忽略一些文件不上传的,我们只需要把忽略的文件或者是文件夹写到.gitignore里边就行.
写法其实也很简单,
对于常用的gitignore模板,可以去下载一个插件,
(45条消息) pycharm之gitignore设置_zt3032的博客-CSDN博客
这个插件提供一些python不同架构下通用的模板,在模板之上加自己的东西就好了
.gitignore的生效机制:
(45条消息) Git忽略文件.gitignore详解_ThinkWon的博客-CSDN博客_忽略gitignore本身
gitignore详细配置:
[Git].gitignore文件的配置使用 - 知乎 (zhihu.com)
Git忽略文件.gitignore的使用 - 简书 (jianshu.com)
gitignore模板:
GitHub - github/gitignore: A collection of useful .gitignore templates
gitignore插件:
(45条消息) pycharm之gitignore设置_zt3032的博客-CSDN博客
到这里我的工程文件夹里显然有这么几个想要git不同步过来的文件,
这个时候
把它删了,然后强行push上去之后,代码就整洁多了
这里有点小瑕疵,就是删了一些之后,那个git commit的信息有点乱,不过问题不大,后续再改代码一点点往里边加就好了.
在使用的时候意外摸索出了一个还不错的方法,赶时间的时候写点屎山先把功能实现了,后续开一个新的分支再慢慢优化,优化完了再把原先的屎山的分支删掉.
gitignore只能忽略那些原来没有被 track 的文件,到这里一般是已经有好多不想要提交上去的文件被track了,这时候清除本地缓存后再提交就好了,
(45条消息) IDEA .gitignore 无法生效_wisdom-chen的博客-CSDN博客_idea ignore不生效
(45条消息) 【秒懂+解决方案】git error: The following untracked working tree files would be overwritten by checkout: …_jaredyam的博客-CSDN博客
解决Git中fatal: refusing to merge unrelated histories-阿里云开发者社区 (aliyun.com)
刚开始用git,难免乱开分支,或者是写出很多屎山,这时候看着这么多屎山分支比较烦,但是直接上传修改会有版本冲突,而且明显是删除了更好,这时候就可以强行合并了
强行把本地分支的代码推到远程仓库分支
git push origin center_node1:center_node --force
#git push 远程分支 本地分支:远程分支 --force
强行行合并:
git强制合并分支 - 简书 (jianshu.com)
有这样一个场景,我在本机上开了一个pycharm写代码,很爽.
但是我云服务器有一个,虚拟机有一个,树莓派有一个,这些都是要我把代码放过去运行的.
而且在电脑上写完了代码,不能调试,要放到对应的平台区调试测试,这个时候使用上述那些操作可以愉快的上传下载.
但是这个时候我突然不小心给某个文件加了权限,或者是改了一下,我在本机上又写好了代码,我把代码push到仓库,再从仓库pull,
这时候发现另一个平台上报错,说本地的代码没commit,但是我不想保存那些,因为那不是我想改的代码
这个时候就可以用到之前的reset,把版本回退,然后再pull就好了,有些版本是本地有但是仓库里没记录的,只要跳回到有仓库记录的版本再pull就不会冲突了.
git log --oneline
先看一下之前的版本,看这个head会指向自己在的版本和分支
如果是没保存,head会处于游离状态
git reset --hard f124864
#这个版本号记得改成自己的
git pull origin center_node:center_node
有时候两端改来改去,电脑又懒得来回pull,比如说开着vnc或者是某些能同步文件的软件,只改一小点来回复制还是最方便的,复制完了提交可能会说有些commit没和云端同步,这个时候特别备注一下再提交其实也蛮方便,但是因为冲突,所以选择强制提交.
git push origin center_node1:center_node --force
#git push 远程分支 本地分支:远程分支 --force
有一说一,这软件真不小,还是很吃内存的
安装这个试了一上午,终于装好了,网上各种版本众说纷纭,在这里结合一下并简单说一下我知道的原理,如果后续看我这个跟着来安不上了,通过大致的原理,改几个地址啥的应该就行了.
Download and install GitLab
(45条消息) Ubuntu GitLab仓库服务器搭建 No command ‘deb‘ found, did you mean(转载)_斗转星移3的博客-CSDN博客
gitlab-ce | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror
gitlab是一个软件,主要在linux平台上运行,
linux环境需要提前准备一些包,然后再装gitlab
我尝试直接从官网上按照操作下载,在最后一步安装的时候提示我找不到包,
然后从国外的服务器上下载也比较慢,于是从清华源上下载
按照那个运行一遍,出问题了再运行这个.
vi /etc/apt/sources.list.d/gitlab-ce.list
gitlab-ce | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror
底下这个还是要去镜像官网去看,指不定哪天更新一下就换掉了,官网链接附在上边~
在里边写入
deb https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/ubuntu focal main
sudo apt-get update
sudo apt-get install gitlab-ce
一般会安装最新版的,我这个下载的时候有一个G,正好趁着下载刷一会电影~
初始化,这初始化比较耗时,可以趁着这个时间继续看一会电影~
sudo gitlab-ctl reconfigure
启动
sudo gitlab-ctl start
然后就可以通过电脑的ip地址访问了
运行gitlab之后再从虚拟机上开pycharm卡死,原来是gitlab和pycharm都比较吃内存,关闭虚拟机,开机前把4G的内存改成6G就行了.
我的root密码:
OFQ11kMZJsPGYT7papkwEcVqWUwIddwRyCLArst2DrU=
https://blog.51cto.com/u_15065852/4106847
(45条消息) Gitlab实战3:Gitlab用户注册及管理_yanqs_whu的博客-CSDN博客_gitlab注册用户审核
gitlab开机启动|启动 停止 重启 - 豆浆D - 博客园 (cnblogs.com)
[(45条消息) gitlab 项目加人_Mandy。的博客-CSDN博客_gitlab拉人进项目](https://blog.csdn.net/weixin_43751840/article/details/89234503#:~:text=进入项目后选settings,然后点members就能进入项目成员界面 之后选择Select members,to invite 就可以加人了)
(45条消息) git修改remote地址_FromNowOnUntilTheEnd的博客-CSDN博客_git 修改remote
基本上用起来和github差不多,不再赘述.
好处是连不到互联网用内网也能用,很舒服.