gitlab 安装配置及 git 命令使用
安装
安装完成之后使用
gitlab-ctl reconfigure
启动服务
访问页面,默认使用root
登录
每次重新更改配置,都需要使用reconfigure
重新启动
常用命令
启动所有 gitlab 组件;
sudo gitlab-ctl start |
停止所有 gitlab 组件;
sudo gitlab-ctl stop |
重启所有 gitlab 组件;
sudo gitlab-ctl restart |
查看服务状态;
sudo gitlab-ctl status |
启动服务;
sudo gitlab-ctl reconfigure |
修改默认的配置文件;
sudo vim /etc/gitlab/gitlab.rb |
检查gitlab;
gitlab-rake gitlab:check SANITIZE=true --trace |
查看日志;
sudo gitlab-ctl tail |
常用操作
初始化空目录,通过 git init
命令把这个目录变成 git 可以管理的仓库
git init |
已有文件的目录创建为 git 仓库
git init |
更改 git 仓库地址
- 方法1
git remote set-url origin https://a.com/p.git
- 方法2
git remote rm origin
git remote add origin https://a.com/p.git - 方法3
编辑.git/config
文件, 修改[remote “origin”]
下面的url即可[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "origin"]
url = https://a.com/p.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "main"]
remote = origin
merge = refs/heads/main
[branch "master"]
remote = origin
merge = refs/heads/master
[pull]
rebase = true
查看分支
查看当前分支
git branch |
查看所有分支,结果中 *
表示当前分支
git branch -a |
切换分支
切换到指定分支
git checkout -b origin/master-dev |
切换主分支
git checkout master |
撤销当前工作区中对指定文件的修改
git checkout FILE |
查看历史记录
显示当前分支的 commit 历史
git log |
查看 git 命令记录
git reflog --date=iso |
查看指定 commit 的代码变化记录
git show 048bc53e65dda5 |
git clone 指定分支
git clone -b ${branch} https://git.com/daemo.git |
.gitignore 配置
.gitignore 语法规范
- 空行或是以
#
开头的行即注释行将被忽略。 - 可以在前面添加正斜杠
/
来避免递归,下面的例子中可以很明白的看出来与下一条的区别。 - 可以在后面添加正斜杠
/
来忽略文件夹,例如build/
即忽略build文件夹
。 - 可以使用
!
来否定忽略,即比如在前面用了*.apk
,然后使用!a.apk
,则这个a.apk
不会被忽略。 *
用来匹配零个或多个字符,如*.[oa]
忽略所有以.o
或.a
结尾,*~
忽略所有以~
结尾的文件(这种文件通常被许多编辑器标记为临时文件);[]
用来匹配括号内的任一字符,如[abc]
,也可以在括号内加连接符,如[0-9]
匹配0至9的数;?
用来匹配单个字符。
.gitignore 示例
忽略 .a 文件 |
.gitignore 不生效的原因及处理办法
原因是 .gitignore
只能忽略那些原来没有被 track 的文件,如果某些文件已经被纳入了版本管理中,则修改 .gitignore
是无效的。
解决方法就是先把本地缓存删除(改变成未 track 状态),然后再提交。
git rm -r --cached . |
强制同步 Git 仓库代码到本地
- 确保您已经保存了本地的更改,并且没有其他未提交的更改。可以使用以下命令查看本地代码的状态: 确保所有更改都已经被提交或者存储起来,以便后续操作。
git status
On branch master
Your branch is ahead of 'origin/master' by 1 commit.
(use "git push" to publish your local commits)
nothing to commit, working directory clean - 然后,执行以下命令来强制拉取远程仓库的最新代码
git fetch --all
git reset --hard origin/mastergit fetch --all
将获取远程仓库的最新代码,而git reset --hard origin/master
将强制将本地分支重置为与远程分支完全相同的状态。这将丢弃本地分支上的任何未提交更改,并将其重置为与远程分支相同的状态。请确保您了解操作的后果,并且您的本地更改已经保存或提交。
- 在需要时,执行以下命令将本地分支的更改强制推送到远程仓库
git push -f origin <branch_name>
客户端账号密码管理
明文保存帐户名密码
使用以下方式会将用户账号密码以明文保存在 ~/.git-credentials
中
git config --global credential.helper store |
存储在明文文件中的凭据存在安全风险,确保该文件的访问权限仅限于当前用户(
chmod 600 ~/.git-credentials
)
将帐户名密码保存在内存中
如果在多人使用的系统上,为了防止自己的账号密码信息泄露,可以参考以下方式将用户密码保存在内存中,并设置密码保存的期限
git config --global --unset credential.helper store |
配置完成后,拉取代码,第一次需要输入用户名密码,用户名密码会被记录到内存中。后续拉取无需再次输入密码。
因为是保存在内存中,系统重启后会丢失,在系统重启后需要重新输入一次密码
假如系统中保存了多个账户名密码,在使用
git pull
或者.git/config
中不指定用户的情况下 默认会使用第一个帐户名密码,此中情况可能出现使用错误账号的原因无法拉取代码(repository not found
)。要规避此问题,需要拉取代码时指定用户名。建议在.git/config
中配置用户名http://username@git.com:8800/project1/api.git
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "origin"]
url = http://username@git.com:8800/project1/api.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
[branch "test"]
remote = origin
merge = refs/heads/test
查看帐户名密码配置信息
查看当前配置的 credential helper
以及其他 Git 配置
git config --list |
或者,查看特定的配置项:
git config --global credential.helper |
清除缓存中的凭据
可以使用以下命令清除缓存中的所有凭据:
git credential-cache exit |
常见错误
Git fatal: Unable to find remote helper for ‘https’
问题原因: 未安装curl-devel,安装curl-devel后重新编译
解决方法: 安装curl-devel后重新编译
error: failed to push some refs to ‘http://git'
push 代码到 Git 仓库报错
To http://git/domain.git |
原因为 Git 仓库中的代码比本地代码更新。如要强制同步本地代码到 Git 仓库,可参考以下步骤
- 确保您已经保存了本地的更改,并且没有其他未提交的更改。可以使用以下命令查看本地代码的状态: 确保所有更改都已经被提交或者存储起来,以便后续操作。
git status
On branch master
Your branch is ahead of 'origin/master' by 1 commit.
(use "git push" to publish your local commits)
nothing to commit, working directory clean - 执行以下命令来拉取远程分支的最新更改,此处要同步的分支为 master。这将拉取远程分支的最新更改并尝试将其合并到本地分支。
git pull origin master
- 如果发生合并冲突并且您已经解决了冲突,请执行以下命令标记冲突已解决
git add .
- 接下来,提交您的更改:
git commit -m "Merge remote changes"
- 最后,将本地更改强制推送到远程仓库
git push -f origin <branch_name>