git clone 出现fatal: HTTP request failed, 解决办法

 git  git clone 出现fatal: HTTP request failed, 解决办法已关闭评论
6月 052019
 

在一台centos6机器上安装了git后,使用

$ git clone https://github.com/pyenv/pyenv.git ~/.pyenv安装pyenv时,出现错误

fatal: HTTP request failed,

 

再尝试了下curl:

$ curl https://github.com/pyenv/pyenv.git
curl: (35) SSL connect error

 

解决方法:更新下curl

$ yum update -y nss curl libcurl

 

DONE!

终端使用git命令提示:No user exists for uid 501 问题解决

 git  终端使用git命令提示:No user exists for uid 501 问题解决已关闭评论
4月 092019
 

使用iTerm输入git命令时提示:

No user exists for uid 501 fatal: Could not read from remote repository.
Please make sure you have the correct access rightsand the repository exists.

解决方法:

关掉终端,再打开即可, 晕!

升级完macOS mojave后,git命令出现xcrun 错误解决方法

 git, mac  升级完macOS mojave后,git命令出现xcrun 错误解决方法已关闭评论
3月 292019
 

今天升级macOS 到 macOS mojave,升级完后终端里使用git的时候,弹出一行错误:

xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun

解决方法,重装xcode command line:

xcode-select --install

如果没有解决问题,执行以下命令

sudo xcode-select -switch /

DONE!!

.gitignore修改后不生效解决办法

 git  .gitignore修改后不生效解决办法已关闭评论
3月 182019
 

.gitignore只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。那么解决方法就是先把本地缓存删除(改变成未track状态),然后再提交:
git rm -r –cached .
git add .
git commit -m ‘update .gitignore’
git push origin 分支名

git提取出两个版本之间的差异文件并打包

 git  git提取出两个版本之间的差异文件并打包已关闭评论
12月 272017
 

查看id

首先你得知道版本之间的commit id 

$ git log --pretty=oneline

这里写图片描述

差异文件并打包

git diff这个命令能比较两个提交之间的差异,使用–name-only参数可以只显示文件名。由于commit id 太长 一般复制前面7位 就可以了 例如:

$ git diff 61d2112 f3c0f99 --name-only 

这里写图片描述 
git diff列出两个提交之间差异的文件

这个输出结果非常有意思,就是差异文件的相对地址,不正好是压缩命令的参数吗?于是立马使用压缩命令

$ zip update.zip 所有的文件… 
就能成功打包了。只是这样的话也太麻烦了吧,幸好linux有提供一个命令xargs能将前一个命令的输出转成另外一个命令的参数,按照这个思路就非常简单了。

$ git diff 61d2112 f3c0f99 --name-only | xargs zip update.zip
  • 这里写图片描述

git: 提交前查看修改 git diff,git diff HEAD,git diff HEAD^, git diff HEAD~i

 git  git: 提交前查看修改 git diff,git diff HEAD,git diff HEAD^, git diff HEAD~i已关闭评论
5月 252017
 

好文章,分享下http://blog.csdn.net/gw569453350game/article/details/46998395

常用 example:

Git diff:是查看 workspace 与 index 的差别的。 
git diff –cached:是查看 index 与 local repositorty 的差别的。 
git diff HEAD:是查看 workspace 和 local repository 的差别的。(HEAD 指向的是 local repository 中最新提交的版本)

注:git diff 后跟两个参数,如果只写一个参数,表示默认跟 workspace中的代码作比较。git diff 显示的结果为 第二个参数所指的代码在第一个参数所指代码基础上的修改。如,git diff HEAD 表示 workspace 在 最新commit的基础上所做的修改。 
如图: 
这里写图片描述

在git提交环节,存在三大部分:workspace, index, repository 尊重作者,原文链接

这三大部分中:

workspace:就是你所工作在的目录,每当你在代码中进行了修改,working tree的状态就改变了。 
index:是索引文件,它是连接working tree和commit的桥梁,每当·我们使用git-add命令来登记后,index file的内容就改变了,此时index file就和working tree同步了。 
repository:是最后的阶段,只有commit了,我们的代码才真正进入了git仓库。我们使用 git commit -m “xxx” 就是将 index 里的内容提交到本地仓库中(push 之后就到了远程仓库了)。

要跟历史版本中的代码作比较:

git diff HEAD^ 比较 workspace 与最新commit的前一次commit的差异(注意与git diff HEAD的差别) 
git diff HEAD~2 比较 workspace 与上2次提交的差异,相当于 git diff HEAD~2 HEAD~0,注意两个HEAD的位置,diff显示的结果表示 后一个(HEAD~0) 相对于 前一个的修改(HEAD~2) 
git diff HEAD~2 HEAD^ 比较上一次commit(即当前commit的前一次)与上上次commit之间的差异,HEAD^=HEAD^1=HEAD~1

注意^与~之间的区别,当存在多个分支时,^可以用来选择分支,HEAD~i永远只选择第i级父节点的第一个分支,HEAD~i^2选择第i级父节点的第二个分支,以此类推;HEAD^=HEAD^1=HEAD~1;如果没有分支,只有一条主线,则HEAD^^^=HEAD^1^1^1=HEAD~3,如果该级几点有第二个分支,则表示为:HEAD^^^2 = HEAD~2^2. 
图文可见链接

为了更加清晰的阐释这个关系,来给出一个实例:

[yaya@yaya-desktop]$ cat main.c #include<stdio.h> int main(int argc,char *argv[])
{ printf(“hello.\n”); printf(“he was a student.\n”); return 0;
}
	
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

然后git init, git add . , git commit; 
之后你将源代码修改为:

[yaya@yaya-desktop]$ cat main.c #include<stdio.h> int main(int argc,char *argv[])
{ printf(“hello.\n”); printf(“he was a student.\n”); printf(“he was born in finland.\n”); return 0;
}
	
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

此时你git add .,但不用执行git commit命令。然后你再将源代码改为:

[yaya@yaya-desktop]$ cat main.c #include<stdio.h> int main(int argc,char *argv[])
{ printf(“hello.\n”); printf(“he was a student.\n”); printf(“he was born in finland.\n”); printf(“he is very clever!\n”); return 0;
}
	
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

这个时候,你执行如下三个命令,仔细查看,我相信你会发现它们三个的区别的!

$ git diff $ git diff –cached $ git diff HEAD
	
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

讲到这里,基本上对git diff命令有了比较深入的了解了,现在你再使用git status看看输出结果,样子大概是这样:

[yaya@yaya-desktop]$ git status # On branch master # Changes to be committed: #   (use “git reset HEAD <file>…” to unstage) # #    modified:   main.c # # Changed but not updated: #   (use “git add <file>…” to update what will be committed) # #    modified:   main.c
	
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

很明显可以知道:

Changes to be committed表示已经存在于index file里,但尚未提交。 
Changed but not updated表示在working tree已经做修改,但还没有使用git add登记到index file里。

git命令备忘(含git submodule使用)

 git  git命令备忘(含git submodule使用)已关闭评论
4月 182016
 

网上整理的git命令.

Git配置
git config –global user.name “storm”
git config –global user.email “stormzhang.dev@gmail.com”
git config –global color.ui true
git config –global alias.co checkout  # 别名
git config –global alias.ci commit
git config –global alias.st status
git config –global alias.br branch
git config –global core.editor “vim”  # 设置Editor使用vim
git config –global core.quotepath false # 设置显示中文文件名
用户的git配置文件~/.gitconfig

Git常用命令
查看、添加、提交、删除、找回,重置修改文件
git help <command>  # 显示command的help
git show            # 显示某次提交的内容
git show $id

git co  — <file>   # 抛弃工作区修改
git co  .           # 抛弃工作区修改

git add <file>      # 将工作文件修改提交到本地暂存区
git add .           # 将所有修改过的工作文件提交暂存区

git rm <file>       # 从版本库中删除文件
git rm <file> –cached  # 从版本库中删除文件,但不删除文件

git reset <file>    # 从暂存区恢复到工作文件
git reset — .      # 从暂存区恢复到工作文件
git reset –hard    # 恢复最近一次提交过的状态,即放弃上次提交后的所有本次修改

git ci <file>
git ci .
git ci -a           # 将git add, git rm和git ci等操作都合并在一起做
git ci -am “some comments”
git ci –amend      # 修改最后一次提交记录

git revert <$id>    # 恢复某次提交的状态,恢复动作本身也创建了一次提交对象
git revert HEAD     # 恢复最后一次提交的状态
查看文件diff
git diff <file>     # 比较当前文件和暂存区文件差异
git diff
git diff <$id1> <$id2>   # 比较两次提交之间的差异
git diff <branch1>..<branch2> # 在两个分支之间比较 
git diff –staged   # 比较暂存区和版本库差异
git diff –cached   # 比较暂存区和版本库差异
git diff –stat     # 仅仅比较统计信息
查看提交记录
git log
git log <file>      # 查看该文件每次提交记录
git log -p <file>   # 查看每次详细修改内容的diff
git log -p -2       # 查看最近两次详细
tig
Mac上可以使用tig代替diff和log,brew install tig

Git 本地分支管理
查看、切换、创建和删除分支
git br -r           # 查看远程分支
git br <new_branch> # 创建新的分支
git br -v           # 查看各个分支最后提交信息
git br –merged     # 查看已经被合并到当前分支的分支
git br –no-merged  # 查看尚未被合并到当前分支的分支

git co <branch>     # 切换到某个分支
git co -b <new_branch> # 创建新的分支,并且切换过去
git co -b <new_branch> <branch>  # 基于branch创建新的new_branch

git co $id          # 把某次历史提交记录checkout出来,但无分支信息,切换到其他分支会自动删除
git co $id -b <new_branch>  # 把某次历史提交记录checkout出来,创建成一个分支

git br -d <branch>  # 删除某个分支
git br -D <branch>  # 强制删除某个分支 (未被合并的分支被删除的时候需要强制)
分支合并和rebase
git merge <branch>               # 将branch分支合并到当前分支
git merge origin/master –no-ff  # 不要Fast-Foward合并,这样可以生成merge提交

git rebase master <branch>       # 将master rebase到branch,相当于:
git co <branch> && git rebase master && git co master && git merge <branch>
Git补丁管理(方便在多台机器上开发同步时用)
git diff > ../sync.patch         # 生成补丁
git apply ../sync.patch          # 打补丁
git apply –check ../sync.patch  # 测试补丁能否成功
Git暂存管理
git stash                        # 暂存
git stash list                   # 列所有stash
git stash apply                  # 恢复暂存的内容
git stash drop                   # 删除暂存区
git stash clear
Git远程分支管理
git pull                         # 抓取远程仓库所有分支更新并合并到本地
git pull –no-ff                 # 抓取远程仓库所有分支更新并合并到本地,不要快进合并
git fetch origin                 # 抓取远程仓库更新
git merge origin/master          # 将远程主分支合并到本地当前分支
git co –track origin/branch     # 跟踪某个远程分支创建相应的本地分支
git co -b <local_branch> origin/<remote_branch>  # 基于远程分支创建本地分支,功能同上

git push                         # push所有分支
git push origin master           # 将本地主分支推到远程主分支
git push -u origin master        # 将本地主分支推到远程(如无远程主分支则创建,用于初始化远程仓库)
git push origin <local_branch>   # 创建远程分支, origin是远程仓库名
git push origin <local_branch>:<remote_branch>  # 创建远程分支
git push origin :<remote_branch>  #先删除本地分支(git br -d <branch>),然后再push删除远程分支
Git远程仓库管理
git remote -v                    # 查看远程服务器地址和仓库名称
git remote show origin           # 查看远程服务器仓库状态
git remote add origin git@github:stormzhang/demo.git         # 添加远程仓库地址
git remote set-url origin git@github.com:stormzhang/demo.git # 设置远程仓库地址(用于修改远程仓库地址
创建远程仓库
git clone –bare robbin_site robbin_site.git  # 用带版本的项目创建纯版本仓库
scp -r my_project.git git@git.csdn.net:~      # 将纯仓库上传到服务器上

mkdir robbin_site.git && cd robbin_site.git && git –bare init # 在服务器创建纯仓库
git remote add origin git@github.com:robbin/robbin_site.git    # 设置远程仓库地址
git push -u origin master                                      # 客户端首次提交
git push -u origin develop  # 首次将本地develop分支提交到远程develop分支,并且track

git remote set-head origin master   # 设置远程仓库的HEAD指向master分支
也可以命令设置跟踪远程库和本地库

git branch –set-upstream master origin/master
git branch –set-upstream develop origin/develop

开发过程中,经常会有一些通用的部分希望抽取出来做成一个公共库来提供给别的工程来使用,而公共代码库的版本管理是个麻烦的事情。而且一旦更新了就要同步到多个引用的系统中,这个时候使用git submodule,然后执行: git submodule update就全部搞定了。

下面就以Android开发为例,讲述下submodule的具体用法。

假设一个Android Demo的目录是这样的:app, extras。其中app是程序的主要目录,extras目录是引用的一些library, 比如程序中引用了volley的library.

添加
为当前工程添加submodule,命令如下:

git submodule add 仓库地址 路径

git submodule add https://android.googlesource.com/platform/frameworks/volley extras
命令执行完成,会在当前工程根路径下生成一个名为“.gitmodules”的文件,其中记录了子模块的信息。添加完成以后,再将子模块所在的文件夹添加到工程中即可。

更新
如果过了一段时间volley库有更新,这时候我们的app也需要更新,命令如下:

git submodule update
删除
ubmodule的删除稍微麻烦点:首先,要在“.gitmodules”文件中删除相应配置信息。然后,执行“git rm –cached ”命令将子模块所在的文件从git中删除。

下载的工程带有submodule
当使用git clone下来的工程中带有submodule时,初始的时候,submodule的内容并不会自动下载下来的,此时,只需执行如下命令:

git submodule update –init –recursive
即可将子模块内容下载下来后工程才不会缺少相应的文件。

摘自:http://stormzhang.com/git/2014/01/27/git-common-command/

git submodule用法

 git  git submodule用法已关闭评论
3月 012016
 

今天工作中碰到一个git命令 git submodule,记录下用法:


开发过程中,经常会有一些通用的部分希望抽取出来做成一个公共库来提供给别的工程来使用,而公共代码库的版本管理是个麻烦的事情。而且一旦更新了就要同步到多个引用的系统中,这个时候使用git submodule,然后执行: git submodule update就全部搞定了。

下面就以Android开发为例,讲述下submodule的具体用法。

假设一个Android Demo的目录是这样的:app, extras。其中app是程序的主要目录,extras目录是引用的一些library, 比如程序中引用了volley的library.

添加

为当前工程添加submodule,命令如下:

git submodule add 仓库地址 路径  git submodule add https://android.googlesource.com/platform/frameworks/volley extras

命令执行完成,会在当前工程根路径下生成一个名为“.gitmodules”的文件,其中记录了子模块的信息。添加完成以后,再将子模块所在的文件夹添加到工程中即可。

更新

如果过了一段时间volley库有更新,这时候我们的app也需要更新,命令如下:

git submodule update

删除

ubmodule的删除稍微麻烦点:首先,要在“.gitmodules”文件中删除相应配置信息。然后,执行“git rm –cached ”命令将子模块所在的文件从git中删除。

下载的工程带有submodule

当使用git clone下来的工程中带有submodule时,初始的时候,submodule的内容并不会自动下载下来的,此时,只需执行如下命令:

git submodule update --init --recursive

即可将子模块内容下载下来后工程才不会缺少相应的文件。

转自:http://www.stormzhang.com/git/2014/02/13/git-submodule/

5月 262015
 

git项目中引用了另一个git项目作为子项目,当使用git submodule init 后再使用git submodule update时出现如下错误提示:


fatal: Needed a single revision Unable to find current revision in submodule path ‘src/xxxlib’


可以通过以下命令方式解决(先删除再重试一次):

o-u-u@localhost:~$ rm -rf src/xxxlib   (src/xxxlib为上面提示到path)  
o-u-u@localhost:~$ git submodule update

10月 292014
 

通过git clone获取的远端git库,只包含了远端git库的当前工作分支。如果想获取其它分支信息,需要使用”git branch  –r” 来查看,如果需要将远程的其它分支代码也获取过来,可以使用命令” git checkout -b 本地分支名 远程分支名”,其中,远程分支名为git branch –r所列出的分支名, 一般是诸如“origin/分支名”的样子。如果本地分支名已经存在, 则不需要“-b”参数。