Linux安装git
1、卸载git
yum -y remove git
2、下载git
https://github.com/git/git/releases
1、解压
tar -zxvf git-2.25.4.tar.gz
2、安装编译所需依赖
yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker -y
3、编译git源码
make prefix=/usr/local/git all
4、安装git至/usr/local/git路径
make prefix=/usr/local/git install
5、配置环境变量 vi /etc/profile
# 在底部加上如下
export PATH=$PATH:/usr/local/git/bin
6、刷新环境变量
source /etc/profile
7、查看Git是否安装完成
git --version
至此,源码编译安装git完成。
如果还是使用的yum安装的git版本,则可以执行如下语言
mv /usr/bin/git /usr/bin/git1
克隆指定的分支:
git clone -b 分支名 仓库地址
git clone 默认是克隆Head指向的master分支,如果是多分支,我们可以单个克隆分支项目。
1.只克隆单分支(非master):
git clone -b 分支名 https://xxx.git
git clone -b my-feature-branch https://github.com/username/repository.git
2.克隆所有分支(多分支)
cd xxx //切换到项目目录
git branch -a //列出所有分支名称如下: * 号表示当前分支
* master
remotes/origin/HEAD -> origin/master
remotes/origin/desktop
remotes/origin/dev
remotes/origin/template
由上结果可以看出,远程仓库origin还有desktop、dev、template等分支。接下来,可以在本地新建分支并与远程仓库的分支进行关联了。
// 作用是checkout远程仓库origin的分支template,在本地起名为template分支,并切换到本地的template分支
git checkout -b template origin/template
// 作用参见上一步解释
git checkout -b dev origin/dev
yum -y install git
查看Git是否安装完成以及查看其版本号
git --version
顺便说一下,yum安装git被安装在/usr/libexec/git-core目录下
===============
1、进入git在GitHub上发布版本页面
https://github.com/git/git/releases,这个页面我们可以找到所有git已发布的版本。这里我们选择最新版的tar.gz包。
tar -zxvf git-2.22.0.tar.gz
cd git-2.22.0
yum install -y curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker expat-devel
yum -y remove git
7、编译git源码
make prefix=/usr/local/git all
8、安装git至/usr/local/git路径
make prefix=/usr/local/git install
vi /etc/profile
在底部加上
export PATH=$PATH:/usr/local/git/bin
11、查看Git是否安装完成
git --version
查看远端地址 git remote –v
查看配置 git config --list
git status
git add . // 暂存所有的更改
git checkout . // 丢弃所有的更改
git status // 查看文件状态
git commit -m "本次要提交的概要信息" // 提交
设置远端仓库地址
git remote set-url origin 你的远端地址
git push origin master出现以下情况:
解决办法:删除当前key,然后重新生成key,
首先假设刚刚从别人的仓库中clone了项目在本地
现在你在自己的github上刚刚创建了一个仓库,想要去存放你clone下来的项目,那么,下面这几件事情是你要去做的
1.取消掉与别人的仓库简历的远程链接
git remote rm origin
2.将本地库与我的远程仓库链接
git remote add origin xxxxx
3.push
git push -u origin master
git设置用户签名
项目级别:
仅在当前本地库范围内有效信息保存位置:./.git/config 文件
git config user.name michael
git config user.email michael_linux@163.com
查看当前用户项目基本的配置
git config user.name
git config user.email
系统用户级别:
登录当前操作系统的用户范围:信息保存位置:~/.gitconfig 文件
git config --global user.name michael
git config --global user.email michael_linux@163.com
查看当前系统用户级别的配置:
git config --global user.name
git config --global user.email
级别优先级
1)就近原则:项目级别优先于系统用户级别,二者都有时采用项目级别的签名
2)如果只有系统用户级别的签名,就以系统用户级别的签名为准
3)二者都没有不允许
1 初始化本地库
git init
![](https://i-blog.csdnimg.cn/blog_migrate/fa3128196e8b8cd814bfd05d30b41f9c.png)
2 查看本地库状态
git status
3.3.1 首次查看( 工作区没有任何文件)
3.3.3 再次查看( 检测到未追踪的文件)
新增文件 aa.txt
3.4 添加 暂存区
3.4.1 将工作区的文件添加到暂存区
git add 文件名
![](https://i-blog.csdnimg.cn/blog_migrate/253f26b6c1eb3c0a5cbdf4c39f6ae5c7.png)
3.4.2 查看状态( 检测到暂存区 有新文件)
3.5 提交 本地库
3.5.1 将暂存区的 文件 提交到本地库
1)基本语法
git commit -m "日志信息 " 文件名
2)案例实操
3.5.2 查看状态(没有文件需要提交)
3.6.1 查看状态(检测到工作区有文件被修改)
3.6 修改文件aa.txt后
3.6.2 将修改的文件再次添加暂存区
3.6.3 查看状态( 工作区的修改添加到了暂存区)
3.7 历史版本
3.7.1 查看历史版本
1 基本语法
# 查看版本信息
git reflog
# 查看版本详细信息
git log
![](https://i-blog.csdnimg.cn/blog_migrate/82934404b402d058a1348594ca419a83.png)
3.7.2 版本穿梭
1 基本语法
git reset --hard 版本号
git reset --hard 814bd2a
![](https://i-blog.csdnimg.cn/blog_migrate/8d62d66760de10e0c97a38cae6e205a1.png)
git的分支
命令名称 | 作用 |
---|---|
git branch 分支名 | 创建分支 |
git branch -v | 查看分支 |
git checkout 分支名 | 切换分支 |
git merge 分支名 | 把指定的分支合并到当前分支上 |
4.3.1 查看分支
1 基本语法
git branch -v
4.3.2 创建分支
创建一个分支myfirstbranch
git branch myfirstbranch
查看分支
git branch -v
4.3.4 切换分支
1 基本语法
git checkout 分支名
切换分支
git checkout master
git checkout myfirstbranch
查看分支
git branch -v
4.3.5 合并分支
1 基本语法
git merge 分支名
2)案例实操 在 master分支上合并 hot-fix分支
Layne@LAPTOP Layne MINGW64 /d Git Space/SH0720 master
$ git merge hot fix
1.linux中Git安装
./config
make
sudo make install
2.配置
cd gitspace/
mkdir first-project
cd first-project/
git init
Initialized empty Git repository in D:/devData/gitspace/first-project/.git/
ls -la .git/
total 11
drwxr-xr-x 1 michael 197121 0 3月 22 08:25 ./
drwxr-xr-x 1 michael 197121 0 3月 22 08:25 ../
-rw-r--r-- 1 michael 197121 130 3月 22 08:25 config
-rw-r--r-- 1 michael 197121 73 3月 22 08:25 description
-rw-r--r-- 1 michael 197121 23 3月 22 08:25 HEAD
drwxr-xr-x 1 michael 197121 0 3月 22 08:25 hooks/
drwxr-xr-x 1 michael 197121 0 3月 22 08:25 info/
drwxr-xr-x 1 michael 197121 0 3月 22 08:25 objects/
drwxr-xr-x 1 michael 197121 0 3月 22 08:25 refs/
项目级别/仓库级别:仅在当前本地库范围内有效信息保存位置:./.git/config 文件
git config user.name michael
git config user.email michael_linux@163.com
系统用户级别:登录当前操作系统的用户范围:信息保存位置:~/.gitconfig 文件
git config --global user.name michael
git config --global user.email michael_linux@163.com
查看当前用户的配置
git config user.name
git config user.email
git config --global user.name
git config --global user.email
级别优先级
1)就近原则:项目级别优先于系统用户级别,二者都有时采用项目级别的签名
2)如果只有系统用户级别的签名,就以系统用户级别的签名为准
3)二者都没有不允许
Eclipse使用git
1、编辑本地忽略配置文件,文件名任意(例:Java.gitignore)
GitHub 官网样例文件
https://github.com/github/gitignore
https://github.com/github/gitignore/blob/master/Java.gitignore
# Compiled class file
*.class
# Log file
*.log
# BlueJ files
*.ctxt
# Mobile Tools for Java (J2ME)
.mtj.tmp/
# Package Files #
*.jar
*.war
*.nar
*.ear
*.zip
*.tar.gz
*.rar
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*
.settings
.project
.classpath
target
在~/.gitconfig 配置文件中引入上述文件
[user]
name = michael
email = michael_linux@163.com
[core]
excludesfile = D:/dev/GitIgnore/Java.gitignore
[注意:这里路径中一定要使用“/”,不能使用“\”]
#进入当前用户的家目录
cd ~
#删除.ssh目录
rm -rvf .ssh
#运行命令生成.ssh 密钥目录
ssh-keygen -t rsa -C michael_linux@163.com
#查看id_rsa.pub文件内容
cat ~/.ssh/id_rsa.pub
#复制id_rsa.pub文件内容,登录GitHub,点击用户头像→Settings→SSH and GPG
keys
New SSH Key
输入复制的密钥信息
回到Git bash 创建远程地址别名
git remote add origin_ssh git@github.com:atguigu2018ybuq/huashan.git
推送文件进行测试
测试
ssh -T git@gitee.com
4、git拉取远程代码
git fetch + git merge
git fetch只从远程拉最新的代码,并修改本地缓存的远程分支的commitID,git fetch之后使用git status就会看到本地分支落后远程分支这种提示。
git pull
git pull会做git fetch同样的工作,此外还会将远程分支直接合并到本地分支。
5、合并分支代码
5.1、命令行操作
1.1、开发分支dev 合并到 master 分支
git checkout dev
git pull
git checkout master
git merge dev
git push -u origin master
1.2、master 分支 合并到 开发分支dev
git checkout master
git pull
git checkout dev
git merge master
git push -u origin dev
5.2、WebStorm操作
5.2.1、Merge-合并
Merge incoming changes into the current branch (将传入的更改合并到当前分支)。
一般比较常见的操作都是通过Merge进行的合并。但是该合并方式下有多种策略,并不是无脑的将文件内容同步。
主要有:Fast-foward,Recursice,Ours,Octopus 等几种策略。git会自动根据commit的提交记录集选择合适的策略进行合并操作。
5.2.2、Rebase-变基
Rebase the current branch on top of incoming changes(在传入更改的基础上重新设置当前分支的基址)
我们的分支合并如果弄错了。会出现已经修改的代码被合并错误了。
相较于Merge的分支合并,Rebase会改变提交的历史,这也是为什么它是会在更新基础上重置当前分支。
![](https://i-blog.csdnimg.cn/blog_migrate/5061cd692ee79e188e62e1d12a7dac7d.png)
windows中Git安装
![](https://i-blog.csdnimg.cn/blog_migrate/c1f686c3e01d584f89a1b17ce2220479.png)
![](https://i-blog.csdnimg.cn/blog_migrate/7beaf8ebf5f76c89a92154e41daad9b3.png)
![](https://i-blog.csdnimg.cn/blog_migrate/2bfab129b3f336488fb60c2495fbb2e5.png)
![](https://i-blog.csdnimg.cn/blog_migrate/bdbeff6f8a7996dcf668098ce05975c1.png)
![](https://i-blog.csdnimg.cn/blog_migrate/f8dad330d23760a9090f74b892c705e6.png)
![](https://i-blog.csdnimg.cn/blog_migrate/a42b691b34382e496505851e79b19cb8.png)
![](https://i-blog.csdnimg.cn/blog_migrate/8fccc2055d20abefb10701f9ebf67c57.png)
![](https://i-blog.csdnimg.cn/blog_migrate/4aadd143178a02ff543e083c84fd5823.png)
![](https://i-blog.csdnimg.cn/blog_migrate/9cd735ef1dbdca7e1cac0ac282f50c20.png)
![](https://i-blog.csdnimg.cn/blog_migrate/1a1f2dc7c7285a8f3ea41f561bd10a15.png)
![](https://i-blog.csdnimg.cn/blog_migrate/19d0f965d62af939fa2cec53a8d8ad34.png)
![](https://i-blog.csdnimg.cn/blog_migrate/4c7ea744d6ea3713370fc9c9ad49ae4d.png)
![](https://i-blog.csdnimg.cn/blog_migrate/2bda0ff4004419affd61bb88475cf19a.png)
![](https://i-blog.csdnimg.cn/blog_migrate/05f77a709ac88a270f2e36fbdbc8f30f.png)
![](https://i-blog.csdnimg.cn/blog_migrate/5eb9fa33e79c37869122b5ca2f73fd18.png)
git --version
9、git查看代码行数
1.查看总提交行数、移除行数、项目总行数
git log --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s\n", add, subs, loc }'
2.查看个人提交的代码行数统计
git log --author="username" --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s\n", add, subs, loc }' -
3.查看项目每个人提交的代码行数统计
git log --format='%aN' | sort -u | while read name; do echo -en "$name\t"; git log --author="$name" --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s\n", add, subs, loc }' -; done
4.查询所有用户的提交总次数
git log --pretty='%aN' | sort | uniq -c | sort -k1 -n -r
9.1、git 查看代码行数
在git中查看代码行数的方法比较简单。只需要使用git的ls-files命令,然后将输出结果通过xargs传给wc进行计数即可。
git ls-files | xargs wc -l
上面这个命令会输出代码仓库中所有文件的行数之和。如果只需要查看某一个文件的行数,可以直接使用wc命令:
wc -l path/to/file
该命令会输出特定文件的行数。
git ls-files | xargs wc -l | grep 'total' | awk '{print $1}'
9.1、git查询提交代码行数
要查看某个提交的代码行数,可以使用git diff命令。该命令可以比较两个提交之间的差异,并输出差异信息。使用该命令时,只需将两个提交的哈希值作为参数传入即可。
git diff {commit1} {commit2} --shortstat
上述命令会输出两个提交之间增加和减少的代码行数。
9.1、git log查看代码行数
要查看代码仓库历史中所有提交的代码行数,可以使用git log命令。该命令默认会输出所有提交的哈希值,作者信息,提交时间和日志信息。可以使用选项–oneline和–short对输出进行简化,然后通过awk和sed等命令进行计数。
git log --oneline --short | awk '{print $1}' | sed 's/^/git diff /' | bash | grep "files changed" | awk '{sum += $4} END {print sum}'
上述命令会输出所有提交之间新增和删除的代码行数之和。
9.1、git查看代码提交行数
如果需要查看某个作者的提交代码行数,可以使用git log命令的–author选项来过滤提交信息。再将输出结果通过awk和sed等命令进行计数。
git log --oneline --author={author name} | awk '{print $1}' | sed 's/^/git diff /' | bash | grep "files changed" | awk '{sum += $4} END {print sum}'
上述命令会输出指定作者提交之间新增和删除的代码行数之和。
9.1、gitlab查看代码量
如果代码仓库使用gitlab进行管理,可以通过在项目仪表盘中查看代码仓库的统计信息。包括代码行数、文件数和提交数量等等。
要查看单个文件的代码行数,可以在gitlab的文件浏览器中打开特定文件,然后通过文件信息中的"行"信息进行计数。
9.1、git代码行数
git代码仓库中的代码行数可以通过git的API接口进行获取。只需使用curl命令向接口发送请求即可。
curl https://api.github.com/repos/{organization}/{repository}/languages | jq 'to_entries | map(select(.key != "Other")) | map(.value) | add'
上述命令会输出代码仓库中所有语言的代码行数之和。
9.1、git查看代码路径
要查看代码仓库中某个文件的路径,可以使用git的–grep选项来搜索特定文件名。
git grep --name-only {file name}
该命令会输出所有包含特定文件名的文件路径。
9.1、git 统计代码行数
在较大的代码仓库中统计代码行数需要使用一些特殊的工具。例如,可以使用cloc来统计代码行数。
cloc path/to/repository
上述命令会输出代码仓库中所有语言的代码行数统计结果。
9.1、git查看代码提交记录
要查看某个提交的详细提交记录,可以使用git log命令。该命令默认会输出所有提交的哈希值,作者信息,提交时间和日志信息。可以使用选项–oneline和-g选项对输出进行简化。
git log {commit} --oneline -g
9.1、查询所有用户的提交总次数
git log --pretty='%aN' | sort | uniq -c | sort -k1 -n -r
根据时间查询次数
git log --after="2023-01-01 00:00:00" --before="2023-12-31 23:59:59" --pretty='%aN' | sort | uniq -c | sort -k1 -n -r
9.1、gitee统计,各用户提交行数
git log --format='%aN' | sort -u | while read name; do echo -en "$name\t"; git log --author="$name" --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s\n", add, subs, loc }' -; done
根据时间查询行数
git log --format='%aN' | sort -u | while read name; do echo -en "$name\t"; git log --author="$name" --after="2023-01-01 00:00:00" --before="2023-12-31 23:59:59" --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s\n", add, subs, loc }' -; done
9.1、查看对应日期个人代码提交量
git log --author="$(git config --get user.name)" --since=2023-01-01 --until=2023-12-31 --pretty=tformat: --numstat | awk '{ add += $1 ; subs += $2 ; loc += $1 - $2 } END { printf "added lines: %s removed lines : %s total lines: %s\n",add,subs,loc }'