title: Git实践技巧
date: 2018-11-21 10:56:52
tags:
categories:
- 版本控制
💠
💠 2024-01-23 19:08:38
Github: lazygit
命令行的简易图形化
Github: Git History
sudo apt-get install git
安装最新版本Git
sudo add-apt-repository ppa:git-core/ppa
sudo apt-get install software-properties-common
sudo apt update
sudo apt install git
从源码安装 Github:git
安装文档(可选):
卸载
Windows下记住密码
:
%USERPROFILE%
_netrc
文本文件:
machine https://github.com/Kuangcp/
login ***
password ***
Linux下记住密码
git config --global credential.helper store
ssh 方法:(推荐)
ssh-keygen
不设置密码cat ~/.ssh/id_rsa.pub | xclip -sel clip
添加即可git config --global user.signingkey 指纹
因为Github等代码托管网站通常是使用 commit 信息里的邮箱来标记提交者的,但是这个信息是可以任意填的,这个时候就需要GPG签名来对该次提交签名,确认是本人提交
Github下拉到eclipse
本地已有代码关联远程空仓库
git remote add origin https://github.com/Kuangcp/StudentManager.git
git push -u origin master
git push -u 随便 随意
建立本地空仓库并关联到远程仓库
mkdir 库名
创建一个文件夹,最好和远程的库同名Git Bash
git init
初始化(建立 .git
目录)touch README.md
git remote add origin master URL
连上远程仓库git push -u origin master
输入用户名,密码 (若因为没有上游节点就按提示输入命令建立初始节点即可 git push --setupstream origin master)git branch --set-upstream dev origin/dev
master同理 git config --global user.name " "
git config --global user.email " "
git config --global color.ui auto
如果是多个账号使用同一台电脑就不要配置这个,单独配置每个仓库下的用户名,邮箱即可
git config user.name ""
使用 .git-prompt.sh 在Bash下显示当前分支 Windows环境不用看,安装的Git-for-windows软件已经会显示分支名了
wget https://raw.githubusercontent.com/git/git/master/contrib/completion/git-prompt.sh -O ~/.git-prompt.sh
下载脚本chmod +x ~/.git-prompt.sh
赋予可执行权限在 .bash_alases文件中添加
lightgreen='\[\033[1;32m\]'
lightcyan='\[\033[1;36m\]'
lightpurple='\[\033[1;35m\]'
yellow='\[\033[1;33m\]'
nocolor='\[\033[0m\]'
source ~/.git-prompt.sh
set_bash_prompt(){
#PS1="[e[32m]u[e[m]@[e[33m]W[e[36m]$(__git_ps1 ' (%s)')[e[31m]$[e[m]"
PS1="${lightcyan}\t${lightgreen}\w${lightpurple}$(__git_ps1 ' (%s)')${yellow} → \[\e[m\]"
}
PROMPT_COMMAND="set_bash_prompt; $PROMPT_COMMAND"
如果使用 zsh 加上 oh-my-zsh 这就是换个主题的事 下面的自动补全也是默认就有
wget https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash -o ~/.git-completion.bash
source .bashrc
即可目录结构
root
├── a
│ └── .git
└── b
└── .git
也就是说在仓库目录的父级目录 root 作为基础目录 (base-path)
git daemon --export-all --base-path=$(pwd) --port=8080
在 当前目录 启动一个Git守护进程
--enable=receive-pack
为了安全,默认是仓库不能被修改, 添加这个参数就可以push了--export-all
开放当前目录下所有项目--base-path=''
指定开放的基本目录(指定开放别的路径)--port=8080
指定开放的端口--verbose
启动看到的日志信息更多直接克隆 git clone git://localhost:8080/a
或者作为已有代码的远程 git remote add hub git://localhost:8080/a
<Location /git>
AuthType Basic
AuthName "GIT Repository"
AuthUserFile "/home/mythos/GitRemoteRepo/htpassed"
Require valid-user
</Location>
htpasswd -cmb /home/mythos/GitRemoteRepo/htpsswd 账号名 密码
git init --bare 程序项目名称
git clone http://localhost/git/程序项目名称
输入用户名密码即可切换到Apache主目录下执行
bin\openssl genrsa -des3 -out server.key 2048 -config conf\openssl.cnf
输入密码bin\openssl req -new -key server.key -out server.csr -config conf\openssl.cnf
输入之前密码bin\openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt
输入之前密码把server.key 更名为server.key.old :bin\openssl rsa -in server.key.old -out server.key
将server.key server.crt 移动到conf
修改 httpd.conf 去掉如下三行的注释 # 字符
LoadModule socache_shmcb_module..
LoadModule ssl_module..
Include conf/extra...
git -c http.sslVerify=false clone URL
git config http.sslVerify false
git pull 对方的分支
git checkout 自己的分支
git merge --no-ff 对方的分支
git push (自己的源+分支)origin master
cat ~/.ssh/id_rsa.pub | xclip -sel clip
复制公钥git config core.fileMode false
git config --global core.quotepath false
即可git ls-files
列出文件列表
git ls-files | xargs wc -l
计算文件中程序代码行数 通过工具:xargs
wc
(中文命名的文件编码问题无法计算行数)git ls-files | xargs cat | wc -l
计算行数总和参考博客 从git中永久删除文件以节省空间 | 参考博客4 减小磁盘占用
删除仓库的某个时间点之前的历史记录,减少.git 目录大小
如何清洗 Git Repo 代码仓库
git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -10 | awk '{print$1}')"
git filter-branch --force --index-filter 'git rm -r --cached --ignore-unmatch 文件的路径' --prune-empty --tag-name-filter cat -- --all
git push origin --force --all
git push origin --force --tags
git pull rebase
来更新分支,而不是 git merge
不然大文件又从别的分支回来了要注意, 所有的分支都必须 pull rebase , 只要还有一个人留有对大文件的引用, 大文件就一直在仓库
由于系统的不同 Windows是 CRLF *nix 是 LF Mac 是 CR | wiki: CRLF
Git提供了一个“换行符自动转换”功能。这个功能默认处于“自动模式”,当你在签出文件时,它试图将 UNIX 换行符(LF)替换为 Windows 的换行符(CRLF);
当你在提交文件时,它又试图将 CRLF 替换为 LF。Git 的“换行符自动转换”功能听起来似乎很智能、很贴心,因为它试图一方面保持仓库内文件的一致性(UNIX 风格),一方面又保证本地文件的兼容性(Windows 风格)。但遗憾的是,这个功能是有 bug 的
git config --global core.autocrlf false
git config --global core.safecrlf true
- CRLF -> LF
sed -i 's/\r//g' file
配合git 就是git ls-files| sed -i 's/\r//g'
https://github.com/hoxu/gitstats
gogitstats
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。