避坑指南:从0开始学习git,将python代码通过git部署到服务器,创建python3虚拟环境

从0开始学习git,将python代码通过git部署到服务器,创建python3虚拟环境

写在前面

作为一个git小白,这几天学git,踩了不计其数的坑,现在就如何快速避坑,快速上手git,将代码部署到服务器,做个总结。这里,特别感谢我的郑学长,不厌其烦的为我解决各种大大小小的问题,太感动了!

1.学习git

我是在廖雪峰老师这里学习git知识,讲的通俗易懂。

坑1:Windows系统下,创建了文件,通过git commit -m上传时,报错。报错的原因是:unable to auto-detect email address。之前写过一篇博客记载
简单说就是git要知道你是谁,所以你注册完git后,是需要设置名字和邮箱的。可是我设置了之后,显示检测不到。网上的方法都不行。最后在外网论坛上找到了解决方法:

git config --replace-all user.email "[email protected]"
git config --replace-all user.name "github_username"

就是将所有仓库的名称和邮箱替换一下就行。当然name和email需要填自己的。

坑2:输入vi xxx.txt可以编辑该txt文件,并且如果不存在的时候,可以创建出来。Windows系统下,按esc后,输入wq没法退出来。有效的方法是按esc后,打开大写,输入两个Z。即esc->Caps->Z->Z,就能保存并退出了。不熟还是不建议这么搞。

git学习过程中,其他坑倒也没碰到,主要还是廖雪峰老师讲的通俗,还录制了视频。文末会放上我总结的一些git命令。不过建议还是好好的去学一下git,别省这点时间。

2.部署代码到服务器

参考博客:https://blog.csdn.net/bencjl/article/details/53699684

为啥要学git,因为比scp命令要方便太多了。

2.1 连接到服务器

连接到服务器一般都是通过ssh连接的。在廖雪峰老师的git教程里面也说了怎么得到自己的ssh。一行命令:

 ssh-keygen -t rsa -C "[email protected]"

在用户主目录里找到.ssh目录,里面有id_rsaid_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。可以cd到那个文件夹,然后用cat命令查看。cat id_rsa.pub,或者打开文件目录,用记事本或者notepad++查看就好。

想要连接到服务器,需要提交自己的公钥过去,那边通过了,才能通过ssh连接。想要连接到github或者其他远程仓库,也需要录入自己的公钥,才能建立连接。

坑3:换了电脑,需要重新提交公钥到服务器嘛?
不需要。将旧电脑的.ssh文件和同个目录下(即用户主目录)的文件.gitconfig一起复制到新电脑就行,然后新电脑的这两个文件提前删除,就可以用啦。

坑4:明明提交过公钥,怎么连接不上?
这里针对有多个git仓库的同学。我有两个git账户,在我能连接到服务器的时候,我发现连接不到Github。思来想去不得其解,最后想是不是没提交公钥到GitHub。上去提交一波,尝试连接,成了。。。
所以,如果连不上,一定要去看看有没有提交公钥!

2.2 通过git部署代码到服务器

已经能顺畅连接到服务器了,下面开始传代码。

首先是本地

准备好代码,可以从网上下的,可以从GitHub上clone的,也可以是自己写的。通过git init将代码所在文件初始化为一个仓库。然后通过git add .git commit -m"xxxx"将本地代码存入本地仓库。这是因为传代码是本地仓库和远程仓库之间的事情。

坑5:用命令git clone克隆GitHub上的仓库,不管是git协议的还是https协议的,速度都很感人。直接.zip下载他不香么。。。我就是头铁,非想试试git clone来克隆代码,慢的一批,8k/s,吐了。

坑6:这个坑我没踩,但是想到了。如果是直接git clone到本地,那就不需要初始化了,同时也拥有一个远程库了。在后续对服务器进行pull和push操作的时候,需要搞清楚哪个是哪个,因为对于让你clone的那个远程库,你可没有push权限。

坑7:养成使用git status的好习惯。git status可以告诉你仓库的状态,让你时刻调整好仓库(如果需要调整的话)。不然如果本地和远程仓库不一致且都做了修改,同步起来就很麻烦。

然后是服务器。

进入到服务器之后,在一个自己确定好的目录下面,git init初始化仓库。通过mkdir xxx命令可以新建名称为xxx的文件夹。然后,让仓库接收代码提交:git config receive.denyCurrentBranch ignore。(照做,我也不太懂为啥)

接下来又是本地。

坑8:想对仓库进行操作,一定要cd到仓库目录呀,不然是不能操作的!

通过命令git remote add <主机名> <网址>来添加服务器,例如:

git remote add server0 git@192.168.1.110:/home/git_repository/.git

其中,server0是自定的主机名,git是上文提到的专门用于提交代码的服务器用户,192.168.1.110是服务器IP,/home/git_repository就是服务器仓库目录。

通过命令 git push server0 master将代码提交到服务器。

坑9:自己的仓库要不要设密码,这个视情况而定咯。如果有陌生人可以进这个服务器,你的东西又比较重要,那为啥不设呢对吧,比如阿里云的服务器。像我自己实验室的服务器,我就不设密码啦。

最后回到服务器

更新仓库状态并检出更改

git update-server-info
git checkout -f

duang~仓库里的代码就更新好了。

3.配置虚拟环境

参考博客:https://blog.csdn.net/sinat_41898105/article/details/80714974

我用到的是python3,因此在服务器配置python3的虚拟环境。很简单,五步就够了

  1. 连接到服务器,进入到工程目录下,在工程目录下输入命令virtualenv env即可在工程下创建env的文件夹。这个时候已经创建好虚拟环境了。

  2. 进入到虚拟环境。输入source env/bin/activate即可。

  3. 安装第三方库。在当前虚拟环境下,用pip install xxx就行了。

  4. 批量安装第三方库。在下目录面创建文件requirements.txt,打开文件requirements.txt,在里面写入工程所需要的环境安装语句。例如,一个Flask项目需要的一些扩展库。

						flask==0.10.1
                        flask-script
                        flask-migrate==2.1.1
                        pymysql
                        flask-sqlalchemy==2.3.2
                        flask-restful
  1. 在当前env环境下输入命令:pip install -r requirements.txt ,这样你就可以开心的浏览这个工程了。

坑10:这个坑是真的坑啊。想要批量安装库,得用vi requirements.txt命令来编辑,而mkdir是创建文件夹的命令,这两个要分清楚。我当时用mkdir requirements.txt,确实创建成功了,但创建的是一个名字叫做requirements.txt的文件夹,后面我用vi尝试编辑的时候,发现不能编辑,想了半天,最后用rm requirements.txt命令的时候,报错,说它是一个目录而不是文件我才反应过来。。。

总的来说,看到这里,肯定是学会git,学会部署代码到服务器,学会创建虚拟环境这些基本操作了。一路磕磕绊绊,才了不少坑,真是难受。万万没想到的是,跑程序的时候还有一堆坑等着我踩,目前已经踩了好几个了,放在下面总结一下,哎,我真难。

坑11:在服务器跑了程序之后,会生成一些乱七八糟的文件。首先通过git status看看是啥文件,如果有文件被动了手脚,他会告诉你:untrack是指这个文件没上传,modified是指这个文件被修改了,deleted是指这个文件被删除了。对于untrack文件,两种处理方式,上传然后本地仓库更新或者rm删了就完事。对于modified和deleted文件,也是两种处理方式,上传然后本地仓库更新或者通过git reset回到之前版本,保持和本地库一致。

坑12:之前有个坑说了要多用git status查看状态,保证本地和远程仓库都是一样的。那如果出现了错误咋办,善于利用git reset回到之前版本,再进行修改,保证一致。另外,需要注意的是如果新建了一个文件夹,git status不会显示有任何修改。。。

坑13:注意虚拟环境的python版本。在命令行运行程序,比如python程序,python3.5 runPython.py,那他就一定是用python3.5运行,如果虚拟环境是python3.7的,可能会报错哦。

坑14:运行程序之间出现相互调用关系,但是程序不在同一个文件夹内,import不到。网上方法是通过sys库加路径进去。学长支招:把需要的文件复制到一块去就完事,好方法!hhh

坑15:有的第三方库更新后就失去了某些功能,比如:cannot import name ‘imread’ from ‘scipy.misc’。解决方法:把scipy降级到1.2.1.又比如:No module named ‘numpy.testing.decorators’。解决方法:安装1.17.0的numpy。

暂时就这么多了,希望能早日把代码跑通,还得赶紧做完毕设呢,冲冲冲!最后附上总结的常用命令行和git命令。

git操作指令

rm 删除命令
rm -r 删除目录
dir 查看当前目录全部文件
cd d:/application 前往目录
cd .. 返回上一层目录
git config --global user.name "boer" 设置初始化名字
git config --global uesr.email "xxxx.qq.com" 设置初始化邮箱
mkdir filename   创建文件夹
pwd  显示当前目录
git init 初始化一个仓库
git add filename 添加文件到暂存区
git add .  添加所有文件到暂存区
git commit -m"xxx" 将暂存区的修改传到仓库中
git status 查看当前状态
git diff filename 查看文件修改记录
git log 查看历史纪录,q退出
git log --pretty=oneline 在一行内查看历史记录
git reset --hard HEAD^ 回到上一个版本
git reset --hard 1094a 回到1094a的版本
cat filename 查看文件内容
git reflog  记录每一次命令
git restore filename 撤销修改操作
git restore --staged filename 撤销add操作
git reset HEAD filename 撤销暂存区操作内容
rm filename 删除文件
git rm filename 在本地仓库删除文件
git commit -m"delete file" 删除命令上传到版本库
git checkout 10994a 把含有该文件的旧版本号里把该文件拿出来放到现版本
git remote add <set a name> XXXXXX,such as git@github.com:Corgiperson/learngit.git 关联一个远程库
git push -u origin master 第一次推送master分支的所有内容
git push origin master  推送最新修改
git clone 克隆远程版本库
git checkout -b dev 创建并切换到dev分支
git branch dev 创建dev分支
git checkout dev 切换到dev分支
git branch 查看当前分支
git merge 合并指定分支到当前分支
git branch -d dev 删除分支dev
git branch -D dev 直接删除分支dev
git switch -c dev 创建并切换到dev分支
git switch master 切换到master
git stash 储存工作
git stash apply 恢复工作
git stash drop 删除储存的工作
git stash pop 恢复工作并删除储存的工作
git stash list 查看储存的工作
git remote 查看远程库信息
git remote -v 显示详细信息
git push origin master/dev 从本地推送到远程库,推送时要指定本地分支
git pull 从远程库更新内容
git tag name 给当前分支加标签
git tag 查看全部标签
git tag name commit_id  给提交记录打标签
git show <tagname> 看标签详情
git tig -d v0.1 删除本地标签
git push origin <tagname> 推送标签到远程库
git push origin --tags 推送全部未推送的标签
git push origin :refs/tags/<tagname> 删除远程库的标签
git remote rm origin 删除已有远程库
git config --global alias.st status 给status配置别名st
git update-server-info 
git checkout -f更新仓库并检查出更改
source env/bin/activate 启动虚拟环境
发布了18 篇原创文章 · 获赞 1 · 访问量 799

猜你喜欢

转载自blog.csdn.net/shuaishuaihyh/article/details/105050863