前言:现在版本控制使用Git居多,如果你还不会的话,点进来,教你如何配置Git。
目录
Git和SVN类似,也是一个配置管理工具,而他们的区别之处在于:
- SVN是集中管理
- 所有存档要保存在一台服务器上。
- 这里可能存在一个单点故障的问题,即一旦服务器出问题,所有人都不能读档。
- Git是分布式管理
- 存档可以保存在本地
- 也可以保存在远程服务器
- GitHub:全球最大同性交友平台,但是服务器在国外,国内访问不稳定。
- Gitee:是国内的一个平台,访问比较稳定。但是要么开源,要么交钱。
- Gitlab:公司自己搭一个服务器
💥1、百度搜索git,基本跳出来的第一个就是官网Git - Downloads (git-scm.com)。
💥2、以Windows为例,点击Download for Windows,如下图:

💥3、点击Click here to download,即可下载最新版本Git-2.35.1.2-64-bit.exe,如下图:

💥4、双击运行exe文件,许可协议,直接点击[next]到第二步。

💥5、选择安装目录,默认即可,点击[next]到第三步。

💥6、选择安装组件,按需勾选,点击[next]到第四步。

💥7、选择开始菜单文件夹,默认即可,下面选项不要勾,点击[next]到第五步。

💥8、选择Git默认编辑器,默认是vim编辑器,vim是纯命令行,操作有难度,我这里是改成了Notepad++,需要提前提前下载好才能点击next,同时在环境变量->系统变量->Path->编辑添加Notepad++的安装地址,如:C:\Program Files\notepad++,这样才能在Git Bash里面直接调用Notepad++,点击[next]到第六步。

💥9、初始化项目(仓库)的主干名字,第一种是让Git自己选择,默认是master,第二种是我们自行决定,默认是main。我这里默认第一种,点击[next]到第七步。

💥10、选择path环境变量设置,默认第二种,点击[next]到第八步。

💥11、选择SSH可执行文件,默认第一个,点击[next]到第九步。

💥12、选择HTTPS后端传输,默认第一个,点击[next]到第十步。

💥13、配置行尾符合转换,默认第一个,点击[next]到第十一步。

💥14、配置终端模拟器以与Git Bash一起使用,默认选择第一种,因为MinTTY功能比cmd多,点击[next]到第十二步。

💥15、选择默认的‘git pull’行为,默认第一项即可,点击[next]到第十三步。

💥16、选择一个凭证帮助程序,默认即可,点击[next]到第十四步。

💥17、配置额外的选项,默认选择文件系统缓存,点击[next]到第十五步。

💥18、配置实验性选项,默认都不勾选,点击Install。

💥19、最后安装成功界面如下,点击Finnish即可。

💥20、最后看一眼Git Bash界面,平时用的会比较多,如下:

环境变量在我们安装过程中是已经配置好的,所以打开cmd窗口,输入git --version检查,能显示版本,说明安装成功。
否则就需要检查环境变量是否配置成功,并需要手动配置,将安装文件的cmd文件路径C:\Program Files\Git\cmd添加到path中。

百度搜索Gitee(中文名:码云),注册一个账号并登录,在登录之后,去认证一下邮箱。
Note:
1、然后随便创建一个库,不需要配置什么,就直接创建即可,否则在pycharm中第一次上传代码时会卡界面。
2、打开之前安装的git bash窗口输入以下命令用来创建Git与Gitee的连接:
git config --global user.name "Gitee中的用户名,比如tom-gitee" git config --global user.email "xxxxx@qq.com"
打开pycharm,点击File-->Settings-->Version Control-->Git-->选择Git的安装路径(如果之前是默认路径的话就是C:\Program Files\Git\cmd\git.exe),然后点击Apply应用,点击OK关闭Settings界面

点击File-->Settings-->Plugins-->搜索并安装gitee-->安装好后重启pycharm。
Note:对于GitHub和Gitlab是不用安装插件的,可以直接使用。Gitee的话是因为它是国内的,pycharm没有集成它,所以需要安装插件。

第一种登录方法:点击File-->Settings-->Version Control-->Gitee-->点击+号-->Login via Gitee,输入我们之前在Gitee中注册的用户名和密码。
Note:比较依赖网速,建议连一个比较好的网络再去登录,比如热点,如果登录失败,多尝试几次。

第二种登录方法:可以在菜单栏中点击VCS-->Share Project on Gitee, 同样会提示你登录Gitee,其实和上面差不多。
Note:旧版本的pycharm的话Share Project on Gitee可能会在VCS下的import into里,反正如果找不到的话都点开看一下吧。

如果不需要改什么就直接点击Share。
Repository name:仓库名,一般默认是项目名。
Remote:远程仓库的别名,默认是origin。

勾选我们想要提交的代码,点击Add即可,在pycharm右下角会出现上传进度条,在上传成功后,也会弹出提示框,点击弹出框上的仓库名,会直接打开到Gitee页面上我们刚刚提交的项目中,如下图:
Note: 其中.idea可不用提交,它是pycharm自带的,对于其他人来说没有意义。


在上传成功之后,前往Gitee,在上面菜单条点击“我的”,可以看到我们刚刚提交的项目,点击它,就能看到我们刚刚提交的所有内容了,如下图:


如图,四个颜色很鲜明。

当在项目中创建一个新的脚本文件时,该文件会被自动检测,提示你是否需要添加到Git的缓存区,点击Add按钮,就会将其添加到Git的缓存区了。这里我们可以勾选"Don't ask again",这样以后就会直接自动添加到缓存区了。


每天在我们开始工作之前,或者提交代码到远程仓库前都应该先拉取远程仓库的最新代码,避免产生版本冲突。
点击Update按钮,会有两个选项,都是可以将远程仓库的最新代码拉取下来。对于新手来说,选第一项即可。
- Merge the incoming changes into the current branch,
- 字面意思Merge:合并分支
- 好处:Merge 是非常好的,因为它是非破坏性的操作。现有的分支不会以任何方式改变。与rebase(将在下面讨论)有很大不同。
- 坏处:如果main分支是非常活跃的(即更新频繁),这可能会污染你的分支, 因为提交的commit历史很多。虽然使用高级的git log选项可以缓解这个问题,但它会让其他开发人员难以理解项目的历史。
- Rebase the current branch on top of the incoming changes
- Rebase这个命令这个命令会始终把你最新的修改放到最前头,比如你对主branch进行rebase以后, 你的所有修改就会在主branch当前所有的修改之前。
- 好处:该命令会合并分支的commit历史,以达到简化历史信息的作用。
- 坏处:使用rebase命令会合并其他分支的历史进入到feature分支,失去了合并前的上下文信息,可能会带来潜在的灾难,因为你不知道合并前,main分支的修改到底做了什么,因为一些信息被合并了(缩减了提交历史)

- 点击commit按钮,会在Changes中自动勾选刚刚修改过的以及新添加的脚本文件,而Unversioned Files是之前我们没有上传的文件就不会被勾选,如果你想上传需要我们主动勾选。
- 如果双击Changes下的文件,会打开原文件以及修改后的文件进行对比,修改过的地方都会有颜色标注出来的,所以提交之前可以再次扫一遍以防有什么错误。
- 在下面的输入框中写入本次提交的注释,这个是必须要写的,这样别人再看的时候,才会知道你做了什么。
- 然后点击下面的Commit按钮就在本地完成了提交。

点击左下角的Git-->Log,可以查看到历史提交的版本,主要查看的就是我们添加的注释,所以说注释很重要。

当我们已经在本地提交了我们的代码之后,我们就可以点击push按钮来上传之前本地的代码到远程仓库,如下图:左边选择我们保存在本地的版本,然后点击下面的push按钮即上传成功。
去Gitee刷新我们的仓库就能看到更新上去的内容了。

当我们想要分享我们Gitee上的项目给别人时,该如何做呢?看下图:
点击进入Gitee上的项目中-->克隆/下载-->HTTPS和SSH皆可,点击复制,就可以得到我们项目的链接了。

点击Git-->Clone-->在URL中输入获取到的仓库链接-->选择要存放的文件地址-->点击Clone,等待进度条结束,就完成了项目代码的克隆。


1、当我们写代码时,会有一个master主分支,主分支只提交没有问题的代码。
2、我们写代码的话是不会直接在主分支写的,或者当主分支有bug时,会创建一个专门去写代码或者专门去解bug的分支。
3、一般公司里改bug的分支叫hot-fix
创建过程:点击pycharm右下角master-->New Branch-->起一个分支名字,比如hot-fix-->点击Create


勾选“Checkout branch” 就会自动切到创建的分支中,我们可以发现右下角的分支名字已经变成了hot-fix分支了。

当我们处于hot-fix分支下,但是想切回master分支的时候:点击右下角hot-fix-->点击master分支-->点击Checkout,即可成功切回到master分支了。

当主分支和分支代码没有冲突的时候,可以直接合并。
💡比如我们在hot-fix分支下,在demo.py中修改了一个代码,commit时要记得加上注释,如下图:
如果当你真正修好了这个bug,你就可以把你的分支合并到主分支上。

💡但是当你在修bug的同时,别人可能也操作了主分支。举个例子,切到master分支下,我对B aiduTest.py这个文件做了一些修改,并commit了这个版本 (这个时候我们处于master分支,去检查demo.py文件,里面是没有内容的,因为我们之前的修改是处于hot-fix分支)

💡查看Git log可以很清楚的看到出现了两个分支,一个分支是主版本被另一个同事修改了,一个分支是我们去修改了一个bug。

💡现在我们想把修改过bug的代码合并到主分支中。做法:先把分支切回到master主分支,然后点击右下角master-->hot-fix-->Merge Selected into Current,就能将我们的分支合并到主分支了。这里的话是因为代码没有冲突,所以直接合并了,不需要手动解决冲突。

查看log,可以发现hot-fix分支已经被合并到主分支了。

当合并时检测到主分支代码和分支代码不一样的时候,需要手动合并。举例如下:
💡切回到hot-fix分支,在demo.py中修改代码并提交,如图:

💡再切回到master分支,同样对demo.py文件修改代码,并提交,如图:

💡查看log,存在了两个分支,一个master,一个hot-fix。

💡保持在master分支下,点击点击右下角master-->hot-fix-->Merge Selected into Current,这时候就会发现由于主分支代码和hot-fix分支代码都被修改过了,就会存在冲突,会提示你去解决这个冲突。

💡你可以选择Accept yours,那hot-fix分支的代码就不要了,选择Accept Theirs,那master分支的代码就不要了。当然这不会影响到另一个同事那边的代码,只是合并的时候没有采用他的代码。
我们也可以选择Merge选项,这时候就会展现master分支的修改,原始代码,hot-fix分支的修改。

💡点击两边的按钮可以把两边的代码合并到中间的原始代码上,如果觉得合并后代码没什么问题就可以点击Apply应用,当然如果有问题,也是可以选择接受左边的或者右边的代码。

💡查看log,分支已被合并

当我们提交了很多的版本之后,想要查看之前的版本时,同样是在log中选择想要查看的版本,然后右键点击checkout,即可切到之前的版本了。

通常,发布一个版本时,会在版本库中打一个标签(tag),这样,就唯一确定了打标签时刻的版本。将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。
选择想要添加标签的版本,右键点击New Tag。
6.2、创建标签输入标签名,即版本号,点击OK。

点击Push,勾选下面的Push tags,即可将标签推送到远程仓库。

在远程仓库中查看标签,点击下图中的master,就能看到标签选项了。

在gitee网站上点击个人头像-->设置-->SSH公钥,可以看到设置SSH公钥的页面

点击“怎样生成公钥”,可以看到生成命令,如下

创建SSH公钥的目的:
使用SSH公钥可以让你在你的电脑和码云通讯的时候使用安全连接(git的remote要使用SSH地址)
⚡️1、在桌面右键选择Git Bash。
⚡️2、在Git bash 窗口输入命令:ssh-keygen -t rsa
Note:-t 后面是写加密协议,rsa也是一种比较常用的加密协议,这里我们采用rsa来创建 -C 邮箱可以省略

⚡️3、按照提示完成三次回车,这时默认会在C:\Users\用户名\.ssh 生成一个.ssh文件夹
⚡️4、进入.ssh文件可以看到生成的rsa文件,.pub文件就是公钥。

⚡️1、右键用记事本打开id_rsa.pub,复制其中的所有代码(开头的ssh-rsa,也是要的,不要漏掉 )
⚡️2、将其粘贴到gitee网站上的SSH公钥中,标题不需要我们取,在代码粘贴进入之后会自动识别机器名。

⚡️3、点击确定,输入密码验证身份,就成功添加了公钥了。
⚡️4、之后,当我们share项目的时候就可以使用SSH链接去share了。

我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div
我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看rubyzip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d
类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
假设我做了一个模块如下:m=Module.newdoclassCendend三个问题:除了对m的引用之外,还有什么方法可以访问C和m中的其他内容?我可以在创建匿名模块后为其命名吗(就像我输入“module...”一样)?如何在使用完匿名模块后将其删除,使其定义的常量不再存在? 最佳答案 三个答案:是的,使用ObjectSpace.此代码使c引用你的类(class)C不引用m:c=nilObjectSpace.each_object{|obj|c=objif(Class===objandobj.name=~/::C$/)}当然这取决于
我正在尝试使用ruby和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t
我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h
我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po