git

 一、安装git

sudo yum install git(红帽系统)

 

二、安装完成后,还需要最后一步设置,在命令行输入

git config --global user.name "your_user"

git config --global user.email “your_user_email”

 因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址(指的是自己注册git的账号和邮箱)

 

三、  创建版本库

 什么是版本库呢?版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来

 每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。

 所以,创建一个版本库非常简单,首先,选择一个合适的地方,创建一个空目录

 第一步:创建一个空目录

mkdir Quality_Control_Scripts

cd Quality_Control_Scripts

 

 第二步,通过git init命令把这个目录变成Git可以管理的仓库:

git init # 会有下面的提示
# Initialized empty Git repository in Quality_Control_Scripts/.git/

 告诉你是一个空的仓库(empty Git repository),可以发现当前目录下多了一个.git的目录,这个目录是Git来跟踪管理版本库的,没事千万不要手动修改这个目录里面的文件,不然改乱了,就把Git仓库给破坏了

 如果你没有看到.git目录,那是因为这个目录默认是隐藏的,用ls -ah命令就可以看见

 

 第三步,用命令git add告诉Git,把文件添加到仓库:比如我有一个代码文件Data_Integrity.py,一定要放在第一步建立的目录下面

git add Data_Integrity.py
# 执行上面的命令,没有任何显示,这就对了

git add . 
# 将当前目录下修改的所有代码从工作区添加到暂存区 . 代表当前目录

 

 第四步,用命令git commit告诉Git,把文件提交到仓库:

git commit -m "add file Data_Integrity.py"

# -m后是说明信息,方便阅读

 

 为什么Git添加文件需要add,commit一共两步呢?因为commit可以一次提交很多文件,所以你可以多次add不同的文件,比如

git add file1.txt
git add file2.txt file3.txt
git commit -m "add 3 files."

 git status命令可以让我们时刻掌握仓库当前的状态,比如某个文件被修改过了,但还没有准备提交的修改。

 git diff顾名思义就是查看difference

 

四、使用git将本地项目上传到Gitlab

 1)本地安装git:https://gitforwindows.org/

 2)在gitlab上创建项目,填写项目名称,选择项目访问权限,private为授权的组员才能访问

 3)打开待上传代码所在文件夹,将项目IDE配置信息删除(这样是为了保证IDE配置信息不会上传到Gitlab中, 也可以使用命令行在上传时将配置文件过滤, 个人觉得可视化删除方便些)

 4)在待上传的项目代码路径下鼠标右键打开git bash here,然后执行下面的操作

git config --global user.name "username"
git config --global user.email "email_address"
git init
git remote add origin 你刚才建立的项目连接,如:
git remote add origin http://your_address/*.git

 有时候出现下面的提升:fatal: remote origin already exists.

 可以先执行:git remote rm origin

 然后再:

git remote add origin http://your_address/*.git
git add .
git commit
git config http.postBuffer 524288000 (特别提醒: 此行是在本地设置缓存, 有些项目文件较大, 使用http无法上传,可设置此命令) #注意这里我没有尝试这条命令
git push -u origin master # 将代码推送到gitlab端
# 注意这里用http协议

 

    注意一:access denied

  执行上面的git push,然后会弹出来输入账号密码的,如果输错,会出现下面的错误信息:

'''
remote: HTTP Basic: Access denied
fatal: Authentication failed for……
'''

 解决办法:

git config --system --unset credential.helper

  之后你在push就会提示输入名称和密码------重要

 

 注意二:ssh密钥添加

  在git bash窗口运行:ssh-keygen -t rsa -C "email_address" # 自己的邮箱

  连续按3个回车(密码默认为空),得到 id_rsa 和 id_rsa.pub 文件,说明生成成功

  将生成的id_rsa.pub内容添加到gitlab的ssh key中,然后可以向gitlab上传代码

 

 当自己和伙伴修改了同样的文件,但是伙伴先提交了gitlab上,为了避免git pull把自己本地的覆盖,我们可以这么操作:

git stash #先将本地修改存储起来
git pull #存储后就可以git pull了

 但是pull提示下面的错误:

 我们在pull之前可能进行了stash操作,但是并没有merge,所以我们stash之后需要进行merge操作:

git add -u 
git commit -m"" 
git pull

 

 然后自己修改后就可以提交到gitlab

git add .
git commit –m "注释"
git config http.postBuffer 524288000# (特别提醒: 此行是在本地设置缓存, 有些项目文件较大, 使用http无法上传,可设置此命令) #注意这里我没有尝试这条命令
git push -u origin master # 将代码推送到gitlab端

 

 更换拉取方式

# 查看拉取方式
git remote -v

# 清除拉取方式
git remote rm origin

# 换成 ssh方式: git remote add origin [git 地址]

  

五、每次push输入密码问题

 参考这里

六、git pull的时候报错

# 原因:本地修改的未commit,git pull报错
# 直接覆盖本地修改的,放弃本地修改
git reset --hard
git pull

 

七、分支merge到master

# 首先,我们创建deb分支,然后切换到deb分支:
git checkout -b deb

# 将你本地的分支代码上传
git push --set-upstream origin deb

# 查看所有分支
git branch -a

# 切换到分支
git checkout your_branch

# 先拉取分支到本地
 git pull origin your_branch

# 修改代码
git add .
git commit -m "调整分支"
git push origin your_branch:remote_your_branch

# 然后可以测试分支正常与否,正常的话可以进行分支merge到master
git checkout master(切换到本地master)
git pull origin master(拉取最新master)
git merge your_branch(进行merge,只是本地进行了merge)
git status
git push origin master(提交到远程master)

# 有时候Master代码被别人更新了,想根据Master来更新自己的分支
# 先切换到自己的 分支上,然后执行下面的Merge,最后再提交到自己的远程分支
git merge master

 

 八、git强制更新并覆盖本地修改

# 从远程拉取最新的代码 不merge
git fetch --all

# 使用指定分支的代码(此处master )强制覆盖代码
git reset --hard origin/master

# 从远程拉取最新的代码 自动merge
git pull


# 本地分支开发不想要了,需要用master来替换,即用master来覆盖其他分支
# 先切换到需要覆盖的分支下面,如这里是test-updata分支
git pull --force origin master:test-updata
# 即用master 覆盖了 test-updata


# 此时需要你执行强制push,才能覆盖远程
git push -u origin test-updata:test-updata -f

 

九、上传超过100MB的文件

# 看到这里一般是你上传超过100M的项目文件,失败了

# 先清除已经提交的大文件缓存,我的大文件后缀为 .zip,注意路径
git rm -r --cached '*.zip'

# 然后把小文件上传到 git
git commit --amend -CHEAD
git push

# 再处理大文件
# cd 项目工程文件夹,安装 lfs
git lfs install


# 表示添加后缀为 .zip 的文件,注意路径也要有
git lfs track "*.zip"

# 执行上面的命令后会发现目录下生成了一个".gitattributes"文件,文件内记录了我们要上传文件的信息
# 只有先把".gitattributes"传上去,才可以上传大文件
git add .gitattributes

git commit -m ".gitattributes"
git push

# 上传完毕后,再开始上传大文件。
git add your_big_file
git commit -m "add your_big_file"
git push -u origin master

# 去看自己的git,your_big_file已经上传了

  需要注意的是,通过git-lfs上传文件是有空间限制的,免费用户如果上传的文件超过了1G,账号就会被冻结,所以大家在上传前一定要检查一下自己还剩多少空间。

 点击自己的头像,进入"Settings",选择Billing"就可以看到自己还剩多少空间。

 如果发现自己空间不足,可以删去一些大文件或者购买更多的空间。如果在上传过程中出现如下报错:

 batch response: Git LFS is disabled for this repository. Uploading LFS objects: 0% (0/1), 0 B | 0 B/s, done ,就说明你的账号被冻结了,需要在GitHub后台提交解封申请

 工作日一般几个小时就会帮你把账号解封,解封后就可以继续上传大文件啦~

 

十、撤销commit和add

# 修改了本地的代码,然后使用:
git add file
git commit -m '修改原因'

# 执行commit后,还没执行push时,想要撤销这次的commit,该怎么办?
git reset --soft HEAD^

# 这样就成功撤销了commit,如果想要连着add也撤销的话,--soft改为--hard(删除工作空间的改动代码)

  

 十一、彻底删除git中的较大文件(包括历史提交记录)

  git 删除大文件:直接删除本地文件,然后push没有用,历史提交的该文件还在,所以git每次提交都会导致文件变大

# 1、在项目根目录下运行
git rev-list --all | xargs -rL1 git ls-tree -r --long | sort -uk3 | sort -rnk4 | head -10
# 列出所有仓库中的对象(包括SHA值、大小、路径等),并按照大小降序排列,列出TOP 10

  

# 2、根据提交记录查找文件路径
git rev-list --objects --all | grep 44dff9118c5926e35687398d62a46e57d5204440

# 3、根据最大文件的路径-步骤2 {filepath},修改此文件的commit历史:
git filter-branch --tree-filter "rm -f {filepath}" -- --all

# 4、强制提交到远程分支:
git push -f --all

 

十二、删除历史的commit,为仓库瘦身

# 查看历史commit,找到要删除的commit和其对应的上一次commit的ID
git log

# 将要删除的commit的上一次的commit的ID作为目标commit id
# 执行下面的命令后,将会展示出目标commitid之后的所有commit,我们把要删除的commitid前面的pick改成drop,保存退出即可将本地的commit清除
git rebase -i 目标commitid

# 推送到远程
git push --force

  

posted @ 2020-04-21 10:47  1直在路上1  阅读(237)  评论(0编辑  收藏  举报