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