赞
踩
将工程上传至gitee仓库进行项目管理。配置Qt Creator推拉仓库中代码。
Gitee是基于git分布式版本控制系统的国内代码托管平台,在团队进行开发协作时有利于代码的更新管理,同时其版本回退功能可以防止一些误操作导致代码发生不希望的修改。目前本人正在做一个基于Qt的项目,Qt Creator中集成了git的版本控制功能,本文用于记录将代码上传至gitee的步骤和遇到的问题。这是我的第一篇文章,值得纪念~如果对你有帮助的话可以点个赞,谢谢大家。
引用自git官方说明文档。起步-Git-是什么?
Git 有三种状态,你的文件可能处于其中之一: 已提交(committed)、已修改(modified) 和 已暂存(staged)。
已修改表示修改了文件,但还没保存到数据库中。
已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。
已提交表示数据已经安全地保存在本地数据库中。
这会让我们的 Git 项目拥有三个阶段:工作区、暂存区以及 Git 目录。
工作区是对项目的某个版本独立提取出来的内容。 这些从 Git 仓库的压缩数据库中提取出来的文件,放在磁盘上供你使用或修改。
暂存区是一个文件,保存了下次将要提交的文件列表信息,一般在 Git 仓库目录中。 按照 Git 的术语叫做“索引”,不过一般说法还是叫“暂存区”。
Git 仓库目录是 Git 用来保存项目的元数据和对象数据库的地方。 这是 Git 中最重要的部分,从其它计算机克隆仓库时,复制的就是这里的数据。
基本的 Git 工作流程如下:
在工作区中修改文件。
将你想要下次提交的更改选择性地暂存,这样只会将更改的部分添加到暂存区。
提交更新,找到暂存区的文件,将快照永久性存储到 Git 目录。
如果 Git 目录中保存着特定版本的文件,就属于已提交
状态。 如果文件已修改并放入暂存区,就属于已暂存
状态。 如果自上次检出后,作了修改但还没有放到暂存区域,就是已修改
状态。
在gitee上创建仓库。
打开终端,输入命令。
$ sudo apt install git-all
设置用户信息。
$ git config --global user.name "John Doe"
$ git config --global user.email johndoe@example.com
使用--global
选项后,每次提交都会使用这些全局信息,如果每个项目使用的信息不一样,可以在项目文件夹下的终端运行没有--global
的命令,或是使用--local
选项(默认)。
查看所有配置和所在文件:
$ git config --list --show-origin
也可以通过git config <key>
查看某一字段的配置。
在工程目录下打开终端,输入命令:
$ git init
这样就初始化了一个git仓库,会在当前目录下生成一个/.git
文件夹。这个文件夹有时看不见是被隐藏了,按ctrl+h
就能显示。
把工作区的所有文件添加至暂存区:
$ git add .
这时/.git/object
文件夹下会生成很多文件夹,里面是工作区经过压缩后的哈希文件,/.git
下还有一个index文件,里面存的是哈希值对应的文件名。
输入命令:
$ git commit -m [message]
[message]
中输入的是备注信息,如果没有加-m
选项,会自动打开vi编辑器让你在COMMIT_EDITMSG
文件中写,没有备注信息无法提交。
不创建开发分支的话,默认就是master主分支。
例如创建一个叫develop
的分支:
$ git branch develop
切换到该分支:
$ git checkout develop
输入git status
可以查看当前分支以及暂存区的状态,输入git branch
可以查看所有分支和当前所处分支。
$ git remote add origin <仓库地址>
注意仓库地址是带.git
后缀的。
push前首先要把gitee仓库中已有的文件pull到本地,否则Gitee上有本地没有的文件就会报错:
! [rejected] master -> master (fetch first)
error: failed to push some refs to ‘https://gitee.com/xxxx/map.git’
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., ‘git pull …’) before pushing again.
hint: See the ‘Note about fast-forwards’ in ‘git push --help’ for details.
建议先备份代码以防万一.
输入命令:
$ git pull origin master --allow-unrelated-histories
后面的选项--allow-unrelated-histories
是由于本地仓库和远程仓库是分别创建的,历史不相关,如果没有的话无法合并,会报错fatal: refusing to merge unrelated histories
。这个命令会强制合并分支,可能会导致合并冲突和代码更改,不过都是新建的仓库就没事。
然后又会弹出一个vi编辑器要求你输入强制合并的原因,随便写就可以了。
git push的命令格式为:
git push <远程主机名> <本地分支名>:<远程分支名>
本地分支和远程分支名一致时,两者就存在追踪关系,本地分支会推送到远程分支。如果远程分支名为空,则会自动创建。
$ git push -u origin master
带上-u
参数后就记录了分支参数默认值,下次可以直接输入git push
,配置存在/.git/config
文件中。
这样就能把代码上传至gitee仓库了。
如果上传其他分支的话,需要先git checkout
切换到其他分支,然后同样执行pull和push的操作即可。
在Qt Creator菜单栏选择工具(tool)->选项(option)中配置git的可执行文件路径,我的在/usr/bin/下面。
然后选择工具(tool)->Git->Local Repository->Commit,选择需要提交的文件。
点击Commit File,就把文件上传到本地仓库了。
选择工具(tool)->Git->Local Repository->Branches,在所选分支右键->Checkout可以切换分支。
但是在执行工具(tool)->Git->Remote Repository->Push时会报错:
error: cannot run ssh-askpass: No such file or directory
fatal: could not read Username for ‘https://gitee.com’: No such device or address
需要先安装ssh-askpass包:
$ sudo apt-get install ssh-askpass
安装完毕后再push就可以在输入账号密码后上传了。需要注意的是,Qt里的push会直接读/.git/config
中的配置信息,如果config里没有所处分支的信息就会报错:
fatal: The current branch develop has no upstream branch.
To push the current branch and set the remote as upstream, use
git push --set-upstream origin develop
The command “/usr/bin/git push” terminated with exit code 128.
为此需要在上文的git push中使用-u
参数先push一遍要上传的分支,确保config文件里有这个分支的信息。
[branch "develop"]
remote = origin
merge = refs/heads/develop
从仓库拉下代码就只需要点击工具(tool)->Git->Remote Repository->Pull了。现在就可以通过Qt Creator方便推拉gitee仓库里的代码了。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。