note

一、初级基本命令

1.1 配置账号

安装好git,第一次打开要设置这个,打开Git Bash,

​ (在公司不建议这么做,账号可能是有变的,每个新仓库去单独设置,把个人的公司的分开。如果没有全局设置,那从远程clone下来的仓库,直接commit的账户是它原来的账户,如果是别人的仓库,就必须要设置才能commit) git config –global –list 先查看一下设置了没有。

git config --global user.name "Your Name"  # 不加--global就是代表对这个仓库设置
git config --global user.email "email@example.com"        

​ 注意 git config 命令的 –global 参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址,它只是为了区分谁是代码的提交者,和后面使用的托管中心的账号没有任何关系,后续也可以随时修改。

​ 执行后生成的配置文件是在C:\Users\Administrator\.gitconfig #(Administrator是用户名),然后后续是介意改这个的。

==特别注意==:(这挺重要的)

设置代理

建议用一次设置一次,当次用完,当次就取消,避免下次没开vpn就一直用不了。

1.2 创建管理仓库

创建一个文件夹专门用于存放项目文件

git init 命令把这个目录变成Git可以管理的仓库

cd 到这个目录下
git init       # 生成.git/文件夹
Initialized empty Git repository in /地址/.git/  #成功会得到类似这样的提示

1.2.1 add添加暂存区

​ 在此目录放入一个文件readme.txt,再git status就能获取此时仓库状态,(若是有东西被修改过没提交就会提醒;若是没有修改,就会说类似这种 nothing to commit, working tree clean)

​ 然后使用git add readme.txt把此文件放进暂存区(可以同时add多个文件),一般会得到一个warning: LF will be replaced by CRLF in readme.txt.,这是我们安装的时候勾选了一个,它会根据系统,来将换行符进行相应的替换;

​ 暂存区文件是可以删除的,使用git rm --cached 文件名

当需要add的文件过多时,可以直接执行git add -A就会把所有文件add。 # 好像 git add . 也是一样的,全部添加

1.2.2 commit提交

git commit -m "一些关于提交的说明" # 这样是会把暂存区的全部提交 # 说明是必须要有的,方便知道版本改动

git commit -m "一些关于提交的说明" a_file b_file # 可以指定只提交哪些文件

1.2.3 查看版本信息

git reflog # 这可以查看简略的版本信息

git log # 这可以查看各个版本的详细信息,包括是谁提交的,什么时候提交的

git log --pretty=oneline # 也是查看所有版本历史记录,比较简洁的那种,一个版本一行

​ 修改文件,提示都会是修改一个文件,新增一行,删除一行(因为是按行维护的,无法表达修改,就是把原来那行删除,再新增一行)

git checkout -f 9eb4831 # 这就是切换到指定版本

1.2.4 查看版本差异

git diff 一版本号 二版本号 readme.txt # 就是版本二相较于版本一的改动

git diff readme.txt # 就会默认最新版和本地进行对比

或者git diff HEAD – readme.txt # 这两个是一样的

1.2.5 版本回退

git reset --hard HEAD^   # 回退到上一个版本
git reset --hard HEAD^^   #回退到上撒谎逆过个版本
git reset --hard HEAD~100  # 回退到往上100个版本
git reset --hard 33b47fd   # 使用版本号回退

​ 回退到老版本后,git log 命令就看不此版本后的版本信息,这个时候就要使用git reflog命令(这里记录我的每一次版本变更的记录);这是已经提交到版本库里,进行版本回退;

​ 下面是还未提交到版本库的回退(这下面的操作也会清除掉本地工作目录文件,若只是想删除暂存区的文件,使用上面的方法):

1.2.6 删除文件

已经提交到了版本库里了,然后本地本一些不要的文件删除了,想要把版本库里的也删除了:

git rm test.txt   # 就是本地删除,然后提交就行了
git commit -m "remove test.txt"      # 这两步就是把版本库里的 也删除了

​ 但是如果是本地误删除了,那就是使用git checkout -- test.txt把误删的文件恢复到最新版本(git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”)

1.3 分支(branch)

创建分支,就是把当前的代码复制出去一份

查看当前分支:git branch -v; -a 就是获取所有分支

创建分支:git branch 分支名;

切换分支:git checkout 分支名;

合并分支:git merge 分支名; # 把指定分支合并到当前分支(merge会把所有的都一次合并) 合并时,如果没有冲突,能快速合并就会是快速合并,相当于把Head指针又指到了master去了(不会产生新的commit);没有冲突,也可能不能快速合并,就是分支和master都改了东西,但是不冲突,就会直接把分支的新东西拿到master来,那就需要做一次commmit,git界面就会让输入这次commit的备注内容,按ctrl + s 确认保存退出。 快速提交就看不到分支的信息(分支修改了,master还没改,这时meger分支,默认就直接把Head指到master中去了),若想保留分支信息,不想快速提交,那就加参数: git merge –no-ff -m “禁用fast-forward合并” fenzi # 这样就不单单只是移动Head的指向,是会有一次新的提交(这个的主要就是bug分支的使用,修复一个bug分支,merge时没有冲突,禁用快速提交来留存记录,不然分支删了就啥都没了)

删除分支:git branch -d 分支名; # 合并后,就可以把这个分支删了,建议删

Tips:

1.3.1 分支合并冲突

​ 但是有冲突的时候,就会报错CONFLICT,master分支后面也会带一个标识MERGING,说明融合出现了冲突,正在解决冲突中;这时去git status就会得到 both modified: 冲突文件名,解决:

那就要选择怎么怎么保留,最重要改成这样(记得把无关的去掉):

this add a # 保留了当前分支的第一行

the same content # 一样的内容留一个就好了

how to say # 保留了分支的第三行

改好了后,就git add readme.txt,然后再commit,冲突解决后,master后的MERGING也就没有了;

Tips:

1.4 tag的相关处理

一般来说,某个版本代码想要添加表示版本的信息,就可以给此时的代码版本打一个tag,

说明:

1.5 .gitignore

​ 未被git记录的文件是红色的,add到暂存区后就是绿色的,commit后颜色又回到白色,忽略文件的颜色土黄色,做了修改但未add的是浅蓝色;(在这里面好像不用add,可以直接提交)

​ 以后新建项目的话,直接在项目的最顶层,加一个名为==.gitignore==文件,先把”.idea”添加进去,不要记录这个文件夹。如果还有其他不想被记录的文件,直接右键文件或文件夹,选择git中的Add to .gitignore (就选择上面的.gitignore,里面还有一个.git/info/exclude,这是将其放在.git路径里面,还是就用.gitignore文件吧)

Tips:

==已经记录文件的删除==

有的时候,我们把一些文件已经添加记录后,后续不想记录它的变化,可以这么操作:

  1. git rm -r –cached 删除的文件名 # 如 git rm -r –cached “*.pt” “*.pth” 这之后,这些文件就会被剔除记录
  2. 再在 .gitignore 中把刚才不想要记录的文件添加进去。
  3. git commit -m “一些描述” # 提交

二、github远程仓库

先在github上创建一个远程库,名字尽量就填跟本地项目名字一样 (注意,尽量就写个项目名,其它什么也别填,不然总是出问题,搞不定)

2.1 创建远程库别名

git remote -v:查看当前所有远程地址别名,要删除某个的话,就:git remote rm a_MyName

git remote add 别名 远程地址:把远程的https或是ssh地址起别名,方便用,(别名最好就起项目名吧,方便使用)

起了别名后,再查看别名,会看到一个别名有两个结果(一个对应push,一个对应fetch,但一般都是一样的)

2.2 push推送本地分支到远程仓库

git push 别名 分支名:这执行后,第一次就会让选择怎么连接github,就选择通过browser,然后验证就行了(别名处可以是https的地址,或者ssh地址)(后面一般ssh免密地址弄好后,就用下面的-u吧)

​ 使用命令 git push -u origin master ==第一次==推送master分支的所有内容(git push -u origin <本地分支名>,一般第一次时使用,这是将本地分支与远程同名分支相关联);此后,每次本地提交后,只要有修改,就可以使用命令 git push 别名 master 推送最新修改。

本地回退到上一个commit版本后,简单的git push是推不上去的,要用:==git push origin HEAD –force==可参考。(origin是远程的别名。)

2.3 pull远程仓库拉取

git pull 别名 分支名:别名处也可以是https地址,要指定拉取到本地的分支名,拉取到本地后,工作区的代码会自动对应更新的

2.4 clone远程仓库克隆

git clone 一个https地址:clone会做如下操作:1、拉去代码,2、本地拉取代码的地方初始化本地仓库(就是.git文件),3、创建别名(用 git remote -v 在拉取代码下看,会发现这个https地址会有别名,叫做-origin

​ 这里也建议直接用ssh地址克隆

2.5 队内协作

​ A创建了一个远程仓库,团队内的B是可以拉取代码,但是当B要push代码到远程仓库时,就会有Permission denied,那就需要A去当这个仓库。Settings—>Manage access—>Invite a collaborator—>然后要搜索你要邀请的人—>点击Pending Invite复制这个链接—>这个链接发给要邀请的人—>接受邀请的人打开这个链接同意即可,这样他也能直接往远程库上push了

2.6 跨团队协作

​ 先fork别人的代码到自己的远程创库,然后就可以进行修改了,改了直接commit到自己的远程仓库,然后就在自己这里 Pull requests—>New pull request(这里就会跳到原来别人仓库那里,也能在界面看到自己的修改)—>Create pull request(就会出现自己commit时添加的信息,可修改(大的那一行就是后面显示的标题,要尽量突出主题,下面的Write可以写一说简单说明,别人也能回复这个))—>Create pull request

​ 然后就可以在最原始的仓库里的 Pull requests里看到这个请求了,点击小字体的版本信息,就能看到修改,如果觉得合适的话,就能merge。

2.7 ssh免密

​ 建议一开始都这么搞一下,然后后面的pull、clone,就好像不受网速的影响了。

==先生成秘钥==

为一个远程仓库添加ssh秘钥:

​ 看一下“C:\Users\本机计算机名”这个目录下是否有.ssh文件夹,若是没有,就执行下面

ssh-keygen -t rsa -C "your_email@example.com"   

​ 需要把邮件地址换成你自己的邮件地址(就用本地git配置时那个地址吧),然后一路回车,使用默认值即可。

​ 由于这个Key也不是用于军事目的,所以也无需设置密码。如果一切顺利的话,可以在用户主目录里找到 .ssh 目录,里面有id_rsaid_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。

==github添加公钥==

​ 登陆GitHub,打开用户头像处Settings—>SSH and GPG keys—>New SSH key;

​ 然后Title就任意填,建议填home,worker这些,以及家里和公司电脑区分,在Key文本框里粘贴 id_rsa.pub文件的内容。

​ 然后就可以本地区去git pull ssh地址 分支名拉去远程库代码;好比:git pull git@github.com:nianjiuhuiyi/git.git master

三、pycharm使用

​ 在项目中有一个.gitignore(Jet系列的这后缀名才管用)或是.ignore(这是去全局配置)文件,里面放的是一些固定资源,不做版本控制的(好像网上都是叫.gitignore,教程是.ignore)

  1. 添加git.exe:File—>Setting–>Version Control—>Git,把git.exe的路径放进去就好了
  2. 项目初始化仓库:(之前先把忽略文件写好吧)顶部VCS—>Create Git Repository,选择在项目地址就行了
    • 若是因为网络问题,无法认证,别直接去添加remote,这时就不建议用自带的share on github了,看前面的第二大点,用命令行来处理。

​ 未被git记录的文件是红色的,add到暂存区后就是绿色的,commit后颜色又回到白色,忽略文件的颜色土黄色,做了修改但未add的是浅蓝色;(在这里面好像不用add,可以直接提交)

​ 分支合并后会自动提交;

四、集成github

4.1 登录设置

​ 一般使用账号密码登录会很慢,半天加载不出来,就选择使用 Log in with Token;然后就会让填Token,如何获取Token:

当把项目推到远程库上时(远程不用提前建库):总是说cannot load ….,然后去看账户上也是显示着connection reset,解决办法:

Tips(建议直接配置ssh免密): 使用https地址时很慢,经常失败,然后SHH的.git地址又会报“Please make sure you have the correct access rights and the repository exists.”,这是由于破解的因素,添加Token一直失败,所以没办法认证,所以就直接配置ssh,这样就能直接使用了。(到这里就算是两种认证方式吧!)

4.2 share仓库

​ 在分享到远程仓库时,名字默认跟本地一样,下面的origin就是为了写个别名;

​ 在本地修改后,要先commit,然后push到远程库的时候,可以看到它是:当前分支名(一般是master)——>一开始建仓库时的别名:远程分支名(一般也是master);值得注意的是,这是默认就是用的https,是很慢的,那我们就要使用ssh:

Tips:

五、Gitee使用

​ 码云的使用跟github几乎一模一样,pycharm需要去下载gitee这个插件,实在有想不起的就看这里

六、GitLab

​ GitLab是由GitLabInc.开发,使用MIT许可证的基于网络的Git仓库管理工具,且具有wiki和 issue跟踪功能。使用Git作为代码管理工具,并在此基础上搭建起来的web服务。 ​ GitLab 由乌克兰程序员 DmitriyZaporozhets 和 ValerySizov开发,它使用 Ruby语言写成。后来,一些部分用Go语言重写。

6.1 环境准备

关于ip地址修改

​ 准备一个centos7以上版本的服务器,关闭防火墙(可以先不关),并且配置好主机名和IP,保证服务器可以上网

==Tips==:

6.2 安装

这里是centos7的在线安装,官方教程(记得在下面第5点选择CE版本)。

​ yum在线安装gitlab-ce时(-ce就相当于是社区版免费版,-ee就是企业旗舰版),要下载几百M的安装文件,可以提前把所需要的RPM包下载到本地,然后使用rpm的方式安装。这是下载地址

​ 我还是根据官方文档在线安装的,手动的方式没试。

安装完毕后进行如下操作:

6.3 使用

​ win本地浏览器直接输入192.168.125.135就可以了,第一次使用的时候,视频讲的是默认是给了一个root账户的,上来就让改root的密码,但我的是一上来就让登录或是注册:于是我去到服务器上设置了一下root的密码,具体操作是:

​ 然后就去网页用root/123456cb登录就行了,要push到服务器时,就要先再服务器上创建一个项目,并获取链接,链接很有可能是’http://gitlab.example.com/root/mmdetection.git’这样,就要把中间的改为’gitlab-server’(win中host加的那个)或是服务器ip地址’192.168.125.135’;

​ pycharm中也要先去下载插件,搜索gitlab,安装’GitLab Projects 2020’,拿到刚才的链接直接放到pycharm中去push就可以了。

可能访问失败

​ 肯能跟本地路由器一直访问失败,就去vim /etc/gitlab/gitlab.rb,把“external_url ‘https://gitlab.example.com’”这一行中的https改成http;

​ 看了以下,本地访问时是http的,要对应起来,当然本地访问时https就无所谓。