linux下ssh公钥验证的设置和远程登录
1.1.1 客户端操作ssh-keygen -t [rsa|dsa]
在目录 /home/yoyo/.ssh/id_rsa 将会生成 密钥文件 和 私钥文件 id_rsa,id_rsa.pub 或 id_dsa,id_dsa.pub。
将 .pub 文件复制到git服务器的 /root/.ssh 目录下。
1.1.2 服务端操作服务器端 /root/.ssh/ 目录下执行命令。
# 添加密钥 cat id_dsa.pub >> /root/.ssh/authorized_keys # 设置authorized_keys权限 chmod 600 authorized_keys # 设置.ssh目录权限 chmod 700 -R .ssh
免密测试
# 测试ssh免密码登录 ssh root@[IP]1.2 git配置信息
1.6 起步 - 初次运行 Git 前的配置
1.2.1 全局config该命令只需要运行一次,作用于全局配置。
设置全局config
// 设置用户名、邮箱 $ git config --global user.name "John Doe" $ git config --global user.email "johndoe@example.com"
修改全局config
git config --global user.name [用户名] git config --global user.email [邮箱名]
查看全局级config
# 查看全局级的 config git config --global -l ~/.gitconfig 或 ~/.config/git/config 文件:只针对当前用户
查看系统级的config
git config --system -l /etc/gitconfig 文件: 包含系统上每一个用户及他们仓库的通用配置
打开全局配置文件
vi ~/.gitconfig1.2.2 项目config
为每个项目设置config文件。
打开项目配置文件
vi /PATH/TO/XXX.git/.git/config 或者 vi /PATH/TO/XXX.git/.git/.gitconfig
查看仓库级的 config
# 进入git服务器的项目目录 cd /PATH/TO/TCP_Hardware_Server.git # 查看仓库级的 config git config --local -l
修改仓库级config
# 修改仓库级config git config user.name [用户名] git config user.email [邮箱名]1.2.3 查看config 配置
# 查看当前生效的配置 git config -l1.3 reset与revert
Git恢复之前版本的两种方法reset、revert(图文详解)
回退(reset)
反做(revert)
二、常用指令理解git中的head和master
2.1 仓库相关# 【客户端】初始化git仓库 git init # 【服务端】初始化Git仓库 git init --bare TF_YOLO_v3_Project.git # 克隆仓库A git clone root@[IP]:/PATH/TO/TCP_Hardware_Server.git # 把工作区所有修改添加到暂存区 git add . # 提交到git仓库 git commit -m "push current files" # 查看仓库状态 git status2.2 分支操作
# 查看所有本地分支 git branch -a git branch # 创建分支 git branch [分支名] # 切换分支 git checkout [分支名] # 切换master主分支 git checkout master # 创建并切换分支 git checkout -b [分支名] # 删除本地分支 git branch -d [分支名] git branch -D [分支名] # 删除远程分支 git push origin_101 --delete [分支名]2.3 远程仓库相关
本地新建分支, push到远程服务器上之后,使用git pull或者git pull 拉取或提交数据时会报错,必须使用命令:git pull origin dev(指定远程分支);如果想直接使用git pull或git push拉去提交数据就必须创建本地分支与远程分支的关联。
# 查看远程分支完整列表 git ls-remote # 查看远端库基本信息 git remote show origin # 查看远端库的分支情况 git branch -r # 克隆远程分支 git clone -b [指定分支名] [远程分支名] # 新建本地分支与远程分支关联 git push –-set-upstream [本地分支名] [origin/远程分支名] # 创建本地分支到远程分支的跟踪 git branch --set-upstream-to=master # 取消对master的跟踪 git branch --unset-upstream master # 删除已关联的远程主机 git remote rm origin # 删除远程分支 git push origin --delete [远程分支名] # 查看当前远程库 git remote -v # 拉取远程分支到本地 git pull origin [远程分支名] # 拉取远程分支与本地分支合并 git pull <远程主机名> <远程分支名>:<本地分支名> git pull origin master:lljyoyo # git pull 等价于:`git fetch` + `git merge` 1. 抓取远程仓库 git fetch [远程分支名] 2. 合并分支 git merge [远程分支名] # 推送本地分支到远程 git push origin [本地分支名][远程分支名] git push origin lljyoyo:master # 推送当前分支到远程分支 git push [远程分支名] git push origin2.4 reset与revert
Git恢复之前版本的两种方法reset、revert(图文详解)
回退(reset)
反做(revert)
# 返回过去到最后一次提交位置 git reset --hard HEAD # 返回到倒数第二次版本 git reset --hard HEAD~ # 返回到前几次的某个版本 git reset --hard HEAD~n # 返回指定版本(返回后也可以回到将来版本) git reset --hard [commit_id]2.5 比较diff修改差异
# 比较文件差异 git diff [文件名] # 比较本地库历史记录和工作区中的文件修改 git diff [本地库中文件历史记录(指针)] [文件名] # 比较最新一次修改 git diff HEAD test.txt # 比较上一次修改 git diff HEAD^ text.txt # 比较[commit_id]为 46e8eaa的修改 git diff 46e8eaa test.txt # 比较所有文件 git diff2.6 git日志
# 查看代码提交记录 git log # 查看简洁提交历史记录 git log --oneline # 显示 ASCII 图形历史记录 git log --graph # 查看所有分支的提交 ASCII 图形历史记录 git log --all --graph # 查看最近2次提交的历史记录 git log -n2 # 创建版本号 git tag2.7 其他指令# 查看所有标签 git tag # 查看指定的标签信息 git show # 标签打在指定的 [CommitcommitID] 上 git tag V0.9 24f92f4 # 创建带有说明的标签,用-a指定标签名,-m指定说明文字 git tag -a V0.1 -m "version 0.1 released" 1186b5e # 删除标签 # 创建的标签只存储在本地,不会自动推送到远程。所以,打错的标签可以在本地安全删除 git tag -d V0.1 # 推送指定的标签到远程 git push origin # 推送所有的标签到远程 git push origin --tags # 删除远程标签 # 如果标签已经推送到远程,先从本地删除,然后从远程删除 git tag -d V0.9 git push origin :refs/tags/V0.9
# 删除文件 git rm [文件] # 删除文件夹 git rm test -r [文件夹] # 暂存工作区 git stash # 恢复工作区(不删除暂存) git stash apply # 删除工作区暂存 git stash drop # 恢复工作区(删除暂存) git stash pop # 查看工作区暂存 git stash list三、搭建git服务器 3.1 服务器端
# 创建文件夹,用于存放git仓库 mkdir xxx cd xxx # 初始化Git仓库 git init --bare TF_YOLO_v3_Project.git # 添加 git 用户 # 为了不让用户直接登录到服务器上去改工作区,并且服务器上的Git仓库通常以.git结尾,把owner改为git groupadd git useradd git -g git passwd git 修改密码:Assd2633 sudo chown -R git:git TF_YOLO_v3_Project.git3.2 客户端
# 本地创建文件夹 mkdir xxx cd xxx # 初始化仓库 git init # 将本地仓库与远程仓库关联起来 git remote add origin(远程仓库名称) root@[IP]:/PATH/TO/TF_YOLO_v3_Project.git # 在本地新建 dev分支,并切换到dev分支 git checkout -b dev # 在远端服务器新建dev分支 git push --set-upstream origin(远程仓库名) dev # 本地分支代码提交到服务器 git push origin 本地分支名:远端分支名 eg:git push origin(远程仓库名) lljyoyo:lljyoyo # 本地lljyoyo分支代码提交到远端lljyoyo分支 # 强制提交本地分支覆盖远程分支 git push origin [远程分支名称] --force # 删除远程的一条记录 git reset --hard [hash指纹]四、git关联新仓库
1. 备份本地分支,用作临时分支 git checkout -b lljyoyo_temp 2. 关联远程新仓库 git remote add origin_101 root@[IP]:/PATH/TO/TF_YOLO_v3_Project.git 3. 拉取远程新仓库 git pull origin_101 [分支名称] 4. 修改冲突,提交分支 git add . git commit -m "xxx" 5. 提交到远程新分支 git push origin_101 lljyoyo_temp:lljyoyo五、git仓库合并 5.1 合并分支代码到主干
# 切换到develop分支: git checkout develop # 把develop分支代码拉取到本地: git pull [remote] develop # 切换到master主干: git checkout master # 合并develop分支代码到master: git merge develop # 提交到远程master主干 git push origin_101 master:master5.2 合并主干代码到分支
# 切换到master主干 git checkout master # 把master主干拉取到本地: git pull5.3 远程代码回滚master # 切换到lljyoyo分支 git checkout lljyoyo # 提交代码 # 根据提示,哪些文件发生了修改,将这些文件替换成最新的即可 git add . git commit -m "xxx" # 合并master到lljyoyo分支: git merge master # 提交到远程lljyoyo分支 git push origin_101 lljyoyo:lljyoyo
# 切换到指定分支 git checkout the_branch # 拉取代码 git pull # 备份当前分支 git branch the_branch_backup # 切换回 the_branch 分支 git checkout the_branch # 本地回滚 git reset --hard [hash指纹] # 删除远程 the_branch git push origin :the_branch # 用回滚后的本地分支重新建立远程分支 git push origin the_branch # 如果前面都成功了,删除这个备份分支 git push origin :the_branch_backup六、git删除远程记录
1. 新建一个lljyoyo分支 git branch -b lljyoyo 2. 拉取远程分支 git pull origin v1.0-develop 3. 备份本地的分支 git checkout -b lljyoyo_temp 4. 切换回原分支 git checkout lljyoyo 5. 查看本地的提交记录 git log --graph 6. 本地回滚 git reset --hard [hash值] 7. 强制更新远程分支 git push --force origin lljyoyo:v1.0-develop 8. 修改代码(或者文件替换),提交本地分支 git add . git commit -m "xxx" 9. 更新远程分支 git push origin lljyoyo:v1.0-develop七、gitlab教程 7.1 初次创建仓库
1. 在gitlab网页中手动创建git仓库 pro_koalo_onlyone 2. 将git仓库clone到本地 git clone ssh://git@[IP]:30001/algorithm/pro_koalo_onlyone.git 3. 进入clone下来的目录中 cd pro_koalo_onlyone 4. 新建本地分支 git checkout -b v1.0-develop 5. 将代码拷贝到本地分支中 如果提示是否合并,则不合并或者跳过 6. 添加到仓库 git add . 7. 提交到仓库 git commit -m "稳定版本_202005301413_lljyoyo" 8. 更新到远程仓库 git push origin v1.0-develop7.2 提交代码到远程仓库
1. clone远程代码 git clone ssh://git@[IP]:30001/algorithm/pro_koalo_onlyone.git git clone -b <指定分支名> ssh://git@[IP]:30001/algorithm/pro_koalo_onlyone.git 2. 新建本地最新版本的分支 lljyoyo git checkout -b lljyoyo 3. 将代码拷贝到本地分支中 如果提示是否合并,则不合并或者跳过 4. 提交本地分支 lljyoyo 的代码到仓库中 git add . git commit -m "xxx" 5. 切换到远程分支 v1.0-develop 如果提示需要新建分支,那新建一个和远程分支一样的分支 v1.0-develop git checkout remote/origin/v1.0-develop git checkout -b v1.0-develop 6. 将远程分支pull下来 git pull origin v1.1-develop 7.1 如果发生冲突,根据提示,哪些文件发生了修改,将这些文件替换成最新的即可 https://www.liaoxuefeng.com/wiki/896043488029600/900004111093344 7.2 git add . 7.3 git commit -m "xxx" 8. 合并分支 lljyoyo 到分支 v1.1-develop git merge lljyoyo 9. 更新远程分支 git push origin v1.1-develop:v1.1-develop八、可能出现的问题 Q: 远程 HEAD 指向一个不存在的引用
git clone下载代码提示不存在HEAD指向的文件
git clone 下载一个仓库出现一个警告,没有生成相关的代码 warning: 远程 HEAD 指向一个不存在的引用,无法检出。 warning: remote HEAD refers to nonexistent ref, unable to checkout.
解决方案: 1. git clone克隆代码 mkdir demo_file git clone root@[IP]:/PATH/TO/TF_YOLO_v3_Project.git cd TF_YOLO_v3_Project 2. 查看分支 git branch git branch -a 3. 切换分支 git checkout remotes/origin/lljyoyo git branch -a 4. 创建本地分支 git checkout -b lljyoyoQ: Automatic merge failed
git常见问题之git pull时Automatic merge failed; fix conflicts and then commit the result
错误原因: 本地分支与远程分支内容不一样,拉取远程分支失败 解决方案: 1. 先提交本地分支 lljyoyo 2. 再创建新分支 develop 3. 切换到新分支,拉取远程分支 4. 切换回原分支,合并远程分支 git merge develop 5. 如果提示合并失败,那用pycharm打开项目,修改报错的代码 6. 修改完成之后,提交本地分支 lljyoyo 7. 推送本地分支到远程分支 git push origin_101 lljyoyoQ: gitlab克隆代码出错
Cloning into 'device_video_play'... > GitLab: The project you were looking for could not be found. fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists.
错误原因: ssh公钥验证失败 解决方法: 重新生成ssh公钥 ssh-keygen -t rsa 在目录 `/home/yoyo/.ssh` 生成公钥 `id_rsa.pub`,再添加到 gitlab SSH Keys 中。Q: failed to push some refs to
git 错误error: failed to push some refs to error: failed to push some refs to 'git@github.com:....." Updates were rejected because the remote contains work that you do not have locally. This is usually caused by another repository pushing to
错误原因: 本地和远程的文件应该合并后才能上传本地的新文件 解决方法: 1、先拉下来,会自动合并的(不用操心) git pull origin lljyoyo 2、再上传 git push origin lljyoyo:lljyoyo



