用户工具

站点工具


linux:git

GIT 是一个分布式的版本管理工具

ssh远程登录不输入密码

执行ssh-keygen -t rsa 生成.ssh目录

进入目录.ssh下,将id_rsa.pub里的内容添加到远程的机子.ssh下的authorized_keys文件中(文件不存在的话就创建一个) 这样在远程登录的时候就不用输入密码

ssh-keygen -t rsa -C "youremail@example.com"    github上介绍使用的方法 不用加email也可以

安装git,用它的图形界面gitk,需要tcl, tk的支持,在gitk里面的File栏有Start git gui。

git init 初始化方法

1.  git init  (个人使用)
2.  git --bare init   初始化成裸库
3.  git --bare init sample.git    生成本地sample库目录, 并且初始化好

添加远程库

本地已建有库,把本地库推送到github上(远程库需要建立对应库),本地库和远程库相互关联.

git remote add origin git@github.com:xxx/xxx.git
git push --set-upstream origin master

克隆远程库

git clone git@github.com:xxx/xxx.git

# 当远程库文件大于1G时,会出现问题,可以考虑只拉取最近一次的提交,这样下载就不会有问题。
git clone --depth=1   

centos git clone 报错 fatal: HTTP request failed 解决办法
yum update -y nss curl libcurl   #  不确定是不是要干脆升级到centos7

git默认拒绝了push操作,需要进行设置,修改.git/config 或者.gitconfig文件添加如下代码:

[receive]
     denyCurrentBranch = ignore

别名alias 比如用git st 代替 git status

git config --global alias.st status
git config --global alias.co checkout
git config --global alias.ci commit
git config --global alias.br branch
git config --global alias.mr merge

基本使用

提交修改到暂存区:            git add  file1         撤消操作:          git checkout -- file1
从暂存区提交版本到库:     git commit file1   撤消操作:          git reset  HEAD file1
查看状态:                          git status

版本回退(整体版本回退,最好不要使用单个文件的版本回退,因为比较容易忘记文件是在与哪个版本作对比):

git reset --hard HEAD^
git reset --hard 版本号               版本号可以只输入前几位,git会自动查找,一般可以输7位
     --hard 版本指针回退到指定版本,  文件也回退到指定版本
     --soft  版本指针回退到指定版本,  文件保持不变,个人感觉没什么意义

HEAD 表示最新版本, HEAD^ 表示上一个版本, HEAD^^表示上上个版本 HEAD~100表示向上100个版本

git reflog 会记录版本的每一次变化(提交&回退等),用于很方便的版本回退工作。

git log
git log --oneline 显示的log信息以单行显示
git log -1  显示最近1次 log
git log -2  显示最近2次 log

Git鼓励大量使用分支: 查看分支:git branch 创建分支:git branch <name> 切换分支:git checkout <name> 创建+切换分支:git checkout -b <name> 合并某分支到当前分支:git merge <name> 删除分支:git branch -d <name> git push origin :branch-name (如果把本地分支传到远程分支,删除远程分支需要此句,冒号前空格不可少)

合并分支 通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。 如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息. git merge --no-ff -m “merge message with no-ff” dev

BUG分支 用于暂存现场的环境, 一般是用于工作干到一半,代码不能提交,但是又需要分析另外一个BUG,使用如下命令 git stash 把现场环境保存起来,本地恢复成干净的分支 git stash pop 恢复刚才保存起来的现场

git 全局忽略.svn目录

编辑~/.gitignore_global文件,添加如下行 .svn 忽略.svn目录 *~ 忽略以~结尾的文件 执行命令 git config --global core.excludesfile ~/.gitignore_global

搭建Git服务器

准备一台运行Linux的机器

第一步,创建git用户,用来运行git服务: $ adduser git

第二步,创建证书登录: 收集所有需要登录的用户的公钥,就是他们自己的id_rsa.pub文件,把所有公钥导入到/home/git/.ssh/authorized_keys文件里,一行一个。

第三步,初始化Git仓库: 先选定一个目录作为Git仓库,假定是/srv/sample.git,在/srv目录下输入命令: $ git init --bare sample.git Git就会创建一个裸仓库,裸仓库没有工作区,因为服务器上的Git仓库纯粹是为了共享,所以不让用户直接登录到服务器上去改工作区,并且服务器上的Git仓库通常都以.git结尾。然后,把owner改为git: $ chown -R git:git sample.git

第四步,禁用shell登录: 出于安全考虑,第二步创建的git用户不允许登录shell,这可以通过编辑/etc/passwd文件完成。找到类似下面的一行: git:x:1001:1001:,,,:/home/git:/bin/bash 改为: git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell 这样,git用户可以正常通过ssh使用git,但无法登录shell,因为我们为git用户指定的git-shell每次一登录就自动退出。

第五步,克隆远程仓库: 现在,可以通过git clone命令克隆远程仓库了,在各自的电脑上运行: $ git clone git@server:/srv/sample.git 剩下的推送就简单了。

git配置文件

.gitconfig

[push]
	default = current
[receive]
denyCurrentBranch = ignore
[alias]
	co = checkout
	ci = commit
	br = branch
	st = status
	mr = merge
[user]
	name = xxx
	email = xxx@xxx.com
[core]
	excludesfile = ~/.gitignore_global
[http]
	postBuffer = 10737418240
linux/git.txt · 最后更改: 2023/03/17 10:12 由 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki