常用科研工具介绍(一):Git和Github(使用pycharm)

目录

前言

一、在github上创建一个属于自己的仓库

二、Pycharm设置github账号:

三、使用pycharm导入自己创建的github仓库

四、单人开发场景下的git使用

五、多人合作开发场景下的git使用

六、补充知识

后记


前言

        对于计算机专业的同学来说,git并不陌生,作为一种常用的版本控制工具,它可以很方便的管理你的代码,尤其是在多人协作开发的场景下,git可以记录代码的修改历史,并且可以很方便的回滚到某一历史记录。

        那么git和github有什么关系?github是全球最大的同性交友社区,啊呸,github是全球最大的开源代码托管网站,它就是一个代码仓库,你可以利用git上传你的代码到github。当然也有别的代码仓库,比如gitte,Coding.Net,以及面向AI开发者的Agit.ai等平台,它们的使用大同小异。pychram作为一个IDE,以及集成了git等版本控制工具,免去了手动输入大量git命令的过程,只需要点击按钮便可完成git的绝大多数功能,尤其是对于计算机交叉邻域的科研人来说学习成本较低,使用方便,因此本文将介绍如何在pycharm上使用git和github进行代码版本管理。

一、在github上创建一个属于自己的仓库

(1)首先登陆github,点击New按钮,进入创建仓库页面:

(2)在创建仓库页面中需要填写或选择的项有:

  • 仓库名称(Repository name):创建的仓库的名称,在这里我填写的是test。
  • 仓库描述(Description):可选。对仓库的简要描述。
  • 仓库的类型:分为Public和Private。Public为公开仓库,所有人均可见,Private为私有仓库,仅自己和自己邀请的人可见。在这里我选择了Private。
  • 是否添加README文件:README文件是一个markdown文件,该文件是对仓库的详细介绍,这里我选择添加README file。
  • 是否添加.gitignore:在一个项目中,并不是所有文件都要上传到git仓库中的。 .gitignore文件中可以填写一组忽略规则,根据规则匹配到的文件将被git排除跟踪。

        如下为几种忽略规则的示例:

bin/: 忽略当前路径下的bin文件夹,该文件夹下的所有内容都会被忽略,不忽略 bin 文件
/bin: 忽略根目录下的bin文件
/*.c: 忽略 cat.c,不忽略 build/cat.c
debug/*.obj: 忽略 debug/io.obj,不忽略 debug/common/io.obj 和 tools/debug/io.obj
**/foo: 忽略/foo, a/foo, a/b/foo等
a/**/b: 忽略a/b, a/x/b, a/x/y/b等
!/bin/run.sh: 不忽略 bin 目录下的 run.sh 文件
*.log: 忽略所有 .log 文件
config.php: 忽略当前路径的 config.php 文件

        事实上,github以及提供了不同语言的.gitignore模板,我们这里直接选择python的.gitignore模板即可,后续根据实际需要,再向其中添加需要忽略的文件。

        最后,点击Create repository按钮,即可创建一个仓库。如下即为所创建的仓库主页:

 

二、Pycharm设置github账号:

        打开pycharm,点击工具栏的 File---Settings...:

 

 

        在打开的选项卡中选择 Version Control---Github,然后点击右侧的加号“+”:

         输入自己的github登录账号和密码:

         点击Log In,便可以看到自己的github账号、头像显示在Version Control>Github选项卡中:

三、使用pycharm导入自己创建的github仓库

        点击Pycharm工具栏的VCS---Get from Version Control...:

         在弹出的选项卡中,选择Github,在右侧搜索我们创建的仓库名test,然后选择下面出现的test仓库,在Directory选项中可以选择项目的存放路径,点击Clone即可将仓库下载到本地。

         克隆完成后即可在pycharm中看到test仓库:

 

四、单人开发场景下的git使用

        前面的步骤我们已经创建了一个github仓库,并将这个仓库克隆到本地,并导入到了pycharm中。这一节,我将介绍单人开发场景下的git使用。

Add操作:

        如图,我们在test项目中创建一个python文件,名为use_git.py:

         Pycharm提示是否将该文件添加到git中,我们可以发现,在点击Add将文件添加到git之前,新创建的文件名称为红色,点击Add,将use_git.py文件添加至git中,可以发现其文件名变为了绿色。

        pycharm中不同文件名颜色代表了不同的git状态:

  • 红色:文件还未被添加到git中
  • 绿色:新添加到git中的文件
  • 蓝色:已被commit的文件,并且文件内容较上次commit发生了改动
  • 黄色:.gitignore中指定的,不受git控制的文件
  • 白色:未发生改变的文件

创建一个新的开发分支:

        点击Pycharm最下方的Git按钮,右键点击Local下的main,选择+New Branch

         在弹出的对话框中输入我们要创建的分支名,一般是自己的名字,创建成功后可以发现多了一个分支,并且该分支前有一个书签图标,代表当前分支为rosinante分支。

 

commit操作:

        我们在rosinante分支下,修改use_git.py文件,加入一行代码:

print("111")

        点击VCS---Commit..., 将这次改动提交到本地仓库中,

 

         在弹出的面板中,输入commit信息,一般用于描述本次提交修改了什么部分,添加了什么样的功能,总之是描述本次commit的内容。

 点击commit即可将改动提交到本地仓库,我们可以在pycharm下方的git面板中看到多了一条git记录:

push操作

        push用于从将本地的分支版本上传到远程并合并。在pycharm中,我们直接点击VCS---Git---Push...即可完成push操作:

         在弹出的面板中可以看到commit的情况,以及被push的文件等,点击push便可将代码push到远程仓库,也就是github中:

 

我们可以打开github上的test仓库,然后点击main,选择自己的分支,例如我刚刚创建的rosinante分支:

         打开rosinante分支下的use_git.py文件,可以看到已经是我们提交的版本了:

 

切换分支与merge操作:

        我们在自己的开发分支(如本文的rosinante分支)上进行了commit push操作,那么如何将这些操作同步到主分支?使用merge操作可以将A分支合并到B分支上。

        在pycharm中我们首先切换到main分支,点击左下方Git按钮,然后右键点击Local下的main分支,在弹出的列表中选择checkout,即可将分支切换为main分支:

         然后选择工具栏中的VCS---Git---Merge Changes,在弹出的面板中,选择要合并的本地分支,然后点击merge按钮:

         可以看到在主分支(main)下已经多了rosinante分支中的改动内容:

 

        然后还需将其push到远程main分支,操作和rosinante分支的push操作一样:

         push成功后可以看到github中main分支已经同步更新了:

         然后我们便可以在切回自己的开发分支进行开发了。

回滚操作:

        在项目开发中,新提交的代码可能存在某些问,需要将代码回滚到某次提交。例如我再rosinante开发分支的use_git.py中新增了一行代码,同样进行了commit push操作,可以看到下方的git历史记录里已经多了一条commit记录:

 我想将代码回滚到“添加了打印111功能”这次提交,只需要右键点击要回滚到的commit记录,点击Reset Current Branch to Here:

 在弹出的对话框中可以选择四种reset策略:

  • Soft:文件不变,但是有区别的地方会被暂存,等待提交。
  • Mixed:此为默认方式 回退一个版本,且会将暂存区的内容和本地已提交的内容全部恢复到未暂存的状态,不影响原来本地文件(未提交的也不受影响)。
  • Hard: 回退一个版本,清空暂存区,将已提交的内容的版本恢复到本地,本地的文件也将被恢复的版本替换。所有区别内容,全部丢弃。慎用该回滚方式。
  • Keep:会彻底回退到你选择的提交的版本内容,所有修改内容不加入暂存区。

        我这里选择Mixed方式,点击Reset后可以看到文件use_git.py的内容并未发生改变,文件名变为了蓝色,相较于该次commit,所有改动的地方都被标识出来:

         点击标识,然后选择Show Diff,可以看到与回滚到的那个版本的对比:

         把改动的地方删掉,use_git.py的文件名又恢复成了白色,这表示我们在此次commit后没有做任何改动:

五、多人合作开发场景下的git使用

(1)邀请协作者加入私有仓库:

        在github中,打开我们创建的test仓库,选择Settings---Collaborators---Add people,输入被邀请人的github账号或昵称,被邀请人的github注册邮箱回收到一封邀请协作邮件,被邀请人通过邮件中的链接确认加入,即可加入该项目中。

 (2)合作开发模拟

比如test项目共有两名开发人员rosinante和phi,他们都有各自的开发分支,并且只能在自己分支上进行开发:

         phi开发了一个新的功能A.py,并commit push到远程phi分支:

         phi需要将commit merge到dev分支:

         然后将dev分支进行push,push到远程dev分支:

         此时,对于开发者rosinante来说,需要将dev分支拉取到本地:

        首先切换到dev分支,点击pycharm的工具栏中的VCS---Git---Pull..:

        在弹出窗口选择orgin/dev,点击pull

可以看到开发者phi提交的代码已经被拉取到开发者rosinante的本地仓库了:

 然后还需要将dev分支的改动合并到自己的开发分支rosinante中,首先将当前分支切换至rosinante,然后点击VCS--Git--Merge Changes...:

         在弹出窗口选择dev分支,然后点击merge,可以看到dev分支已经被合并到rosinante分支了:

梳理一下步骤:

  1. 前提:开发者A在A分支上进行开发,开发者B在B分支上进行开发。
  2. A提交了一个新功能,并将A分支merge到dev分支,然后push了dev分支。
  3. B切换到dev分支,使用pull拉取最新代码,然后将dev分支merge到B分支,完成自己分支的代码同步。

(3)解决冲突

冲突情况举例:

  • 不同分支下的merge

        比如在不同分支下进行分支合并时,我们在本地修改了a文件并把a文件的修改push到了test分支下,接着我们切换到master分支下将test分支上的修改合并到当前master分支下时,如果master分支下的a文件也有修改的话,这时在进行merge也会产生冲突。(因为这个两个分支是不同步的,两个分支下的同一个文件都有修改)

  • 同一个分支下的pull或push

        比如在同一个分支下,对本地的a文件做出了修改,此时我们在进行pull或push时如果远程分支下下的a文件也有修改,那么代表本地和远程分支的代码是不同步的,此时也会引起冲突

        我们模拟一下冲突发生的场景,phi在A.py文件里加入了一行新代码,并commit,然后merge到dev分支,push到远程dev分支:

         此时rosinante也对A.py文件进行了改动,不同的是其改动的代码为print("333"):

         然后将改动的rosinante分支合并到dev分支,将dev分支push到远程分支时,弹出警告:

        点击Merge,弹出下面窗口,该窗口显示了发生冲突的文件:

 我们双击Name列表中的A.py

        可以看到这个窗口最左侧为我们的版本,右侧为远程仓库中的版本,如果我们想同时保留phi的更改和rosinante的更改,可以点击Your version 的 >>> 按钮,和Changes from server 的 <<< 按钮:

         同时保留两个语句,解决冲突:

        然后点击Apply,在进行push操作:

 

        也可以选择Accept Left 或者 Accept Right解决冲突,注意 这只会保留其中一个版本:

六、补充知识

1.git的暂存区、工作区、版本库

2.如何使用pycharm把现有的项目提交到github上:

        点击VCS---Import into Version Control---Share Project on GitHub即可:

 3:如何使用pycharm创建一个新的仓库

        点击VCS---Import into Version Control---Create Git Repository即可:


后记

        对于课题组的科研项目来说,只需要浅度使用git即可,配合pycharm强大的GUI,可以大大减少git的学习成本。合理使用git,会很好的维护自己的开发版本,便于多人协作开发。

 

 

 

  • 7
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值