Showing posts with label Git. Show all posts
Showing posts with label Git. Show all posts

Thursday, March 23, 2017

Git 本地查看提交信息的Log


这个工具超级好用赞一个:

Github :
https://github.com/GeekHades/git-standup

Sunday, July 17, 2016

Git 基本教程之 ------------ TAG



Link:
https://git-scm.com/book/zh/v1/Git-基础-打标签

显示本地的tag

git tag

模糊查询
$ git tag -l 'v1.4.2.*' v1.4.2.1 v1.4.2.2 v1.4.2.3 v1.4.2.4


含附注的标签

创建一个含附注类型的标签非常简单,用 -a (译注:取 annotated 的首字母)指定标签名字即可:
$ git tag -a v1.4 -m 'my version 1.4'
$ git tag
v0.1
v1.3


可以使用 git show 命令查看相应标签的版本信息,并连同显示打标签时的提交对象。
$ git show v1.4
tag v1.4
Tagger: Scott Chacon <schacon@gee-mail.com>
Date:   Mon Feb 9 14:45:11 2009 -0800

my version 1.4

commit 15027957951b64cf874c3557a0f3547bd83b3ff6
Merge: 4a447f7... a6b4c97...
Author: Scott Chacon <schacon@gee-mail.com>
Date:   Sun Feb 8 19:02:46 2009 -0800

    Merge branch 'experiment'

分享标签

默认情况下,git push 并不会把标签传送到远端服务器上,只有通过显式命令才能分享标签到远端仓库。其命令格式如同推送分支,运行 git push origin [tagname] 即可: 
$ git push origin v1.5
Counting objects: 50, done.
Compressing objects: 100% (38/38), done.
Writing objects: 100% (44/44), 4.56 KiB, done.
Total 44 (delta 18), reused 8 (delta 1)
To git@github.com:schacon/simplegit.git
* [new tag]         v1.5 -> v1.5
如果要一次推送所有本地新增的标签上去,可以使用 --tags 选项:
$ git push origin --tags
Counting objects: 50, done.
Compressing objects: 100% (38/38), done.
Writing objects: 100% (44/44), 4.56 KiB, done.
Total 44 (delta 18), reused 8 (delta 1)
To git@github.com:schacon/simplegit.git
 * [new tag]         v0.1 -> v0.1
 * [new tag]         v1.2 -> v1.2
 * [new tag]         v1.4 -> v1.4
 * [new tag]         v1.4-lw -> v1.4-lw
 * [new tag]         v1.5 -> v1.5


如何获取远程的 tag
git  fetch origin tag  <TagName>


如何查看远程的Tag list
git ls-remote --tags

如果想显示最近十条的数据
git ls-remote --tags | grep -o 'refs/tags/dev-[0-9]*\.[0-9]*\.[0-9]*' | sort -r | head | grep -o '[^\/]*$'


http://stackoverflow.com/questions/20734181/how-to-get-list-of-latest-tags-in-remote-git

Wednesday, May 25, 2016

Git 使用的小技巧


官方教程:


git 小技巧

分支合并

快速合并
git merge branchName

创建新的节分 合并

git merge --no-ff dev -m "@Hades merge dev"

git merge --no-ff dev -m "@Hades merge devHades"



刷新分支信息:
git fetch -p origin
git push [远程名] :[分支名]
$ git push origin :serverfix

git push [远程名] [本地分支]:[远程分支]


删除远程分支和tag

在Git v1.7.0 之后,可以使用这种语法删除远程分支:
git push origin --delete <branchName>





Git查看、删除、重命名远程分支和tag

这篇文章记录我在使用git的过程中碰到远程分支和tag的相关内容,提纲:
  1. 查看远程分支
  2. 删除远程分支和tag
  3. 删除不存在对应远程分支的本地分支
  4. 重命名远程分支
  5. 把本地tag推送到远程
  6. 获取远程tag

查看远程分支

加上-a参数可以查看远程分支,远程分支会用红色表示出来(如果你开了颜色支持的话):
$ git branch -a
  master
  remote
  tungway
  v1.52
* zrong
  remotes/origin/master
  remotes/origin/tungway
  remotes/origin/v1.52
  remotes/origin/zrong

删除远程分支和tag

在Git v1.7.0 之后,可以使用这种语法删除远程分支:
$ git push origin --delete <branchName>
删除tag这么用:
git push origin --delete tag <tagname>
否则,可以使用这种语法,推送一个空分支到远程分支,其实就相当于删除远程分支:
git push origin :<branchName>
这是删除tag的方法,推送一个空tag到远程tag:
git tag -d <tagname>
git push origin :refs/tags/<tagname>
两种语法作用完全相同。

删除不存在对应远程分支的本地分支

假设这样一种情况:
  1. 我创建了本地分支b1并pull到远程分支 origin/b1
  2. 其他人在本地使用fetch或pull创建了本地的b1分支;
  3. 我删除了 origin/b1 远程分支;
  4. 其他人再次执行fetch或者pull并不会删除这个他们本地的 b1 分支,运行 git branch -a 也不能看出这个branch被删除了,如何处理?
使用下面的代码查看b1的状态:
$ git remote show origin
* remote origin
  Fetch URL: git@github.com:xxx/xxx.git
  Push  URL: git@github.com:xxx/xxx.git
  HEAD branch: master
  Remote branches:
    master                 tracked
    refs/remotes/origin/b1 stale (use 'git remote prune' to remove)
  Local branch configured for 'git pull':
    master merges with remote master
  Local ref configured for 'git push':
    master pushes to master (up to date)
这时候能够看到b1是stale的,使用 git remote prune origin 可以将其从本地版本库中去除。
更简单的方法是使用这个命令,它在fetch之后删除掉没有与远程分支对应的本地分支:
git fetch -p

重命名远程分支

在git中重命名远程分支,其实就是先删除远程分支,然后重命名本地分支,再重新提交一个远程分支。
例如下面的例子中,我需要把 devel 分支重命名为 develop 分支:
$ git branch -av
* devel                             752bb84 Merge pull request #158 from Gwill/devel
  master                            53b27b8 Merge pull request #138 from tdlrobin/master
  zrong                             2ae98d8 modify CCFileUtils, export getFileData
  remotes/origin/HEAD               -> origin/master
  remotes/origin/add_build_script   d4a8c4f Merge branch 'master' into add_build_script
  remotes/origin/devel              752bb84 Merge pull request #158 from Gwill/devel
  remotes/origin/devel_qt51         62208f1 update .gitignore
  remotes/origin/master             53b27b8 Merge pull request #138 from tdlrobin/master
  remotes/origin/zrong              2ae98d8 modify CCFileUtils, export getFileData
删除远程分支:
$ git push --delete origin devel
To git@github.com:zrong/quick-cocos2d-x.git
 - [deleted]         devel
重命名本地分支: 
git branch -m devel develop
推送本地分支:
$ git push origin develop
Counting objects: 92, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (48/48), done.
Writing objects: 100% (58/58), 1.38 MiB, done.
Total 58 (delta 34), reused 12 (delta 5)
To git@github.com:zrong/quick-cocos2d-x.git
 * [new branch]      develop -> develop
然而,在 github 上操作的时候,我在删除远程分支时碰到这个错误:
$ git push --delete origin devel
remote: error: refusing to delete the current branch: refs/heads/devel
To git@github.com:zrong/quick-cocos2d-x.git
 ! [remote rejected] devel (deletion of the current branch prohibited)
error: failed to push some refs to 'git@github.com:zrong/quick-cocos2d-x.git'
这是由于在 github 中,devel 是项目的默认分支。要解决此问题,这样操作:
  1. 进入 github 中该项目的 Settings 页面;
  2. 设置 Default Branch 为其他的分支(例如 master);
  3. 重新执行删除远程分支命令。

把本地tag推送到远程

git push --tags

获取远程tag

git fetch origin tag <tagname>

参考文章


Thanks  To:

http://zengrong.net/post/1746.htm\

Tuesday, May 24, 2016

ssh: connect to host IP port 22: Connection refused

一般我们自己买的VPS, 会把端口22 给禁掉,因为他特别容易受到攻击!

但是,我们在用git clone 代码的时候,会出现这种问题

╰─$ git clone hades@IP:/home/hades/kernelCode.git        128 ↵
Cloning into 'kernelCode'...
ssh: connect to host IP port 22: Connection refused
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.


ssh  默认访问 22 端口

所以我们git  clone  set port 

you can do it like this:

git clone ssh://git@IP:port/home/hades/kernelCode.git


Thanks To:







Monday, April 25, 2016

How to study git?



https://git-scm.com/about

How to push local git to server?


I have not find good way to resolve this quesiton!

You can following this way:
FIrst :

You must set up git repo in the server:
git init --bare demo.git

In your client PC or Computer
Second: you just use clone command to clone the code:
git clone ssh:ip/directiry/demo.git

So EASY

Now you just start your work or you copy your had write code to the program! Just so easy!

Now you have done~


I try this way:
http://stackoverflow.com/questions/8978650/how-do-i-move-my-local-git-repository-to-a-remote-git-repository

can not resolve this question



Monday, February 29, 2016

Hades Git .gitignore 文件不起作用?


我用Git 管理自己的Android project, 我已经忽略了一些系统自动生成的文件例如:

.gitignore

*.iml.gradle/local.properties.idea/misc.xml.idea/workspace.xml.idea/libraries.DS_Store/build/gradle

.idea/workspace.xml  是 AS  自动生成的
.idea/libraries  是依赖库



但是,我在push的时候。 还是把 build 文件夹给push 到了服务器,别人在pull 的时候,还是有我的build文件夹,这样就会有冲突。

我参考这篇bolg:http://t.hengwei.me/post/gitignore文件不起作用/#


根本原因




.gitignore文件只是ignore没有被staged(cached)文件,对于已经被staged文件,加入ignore文件时一定要先从staged移除。
下面这段话来自github: 因此,要想用gitignore忽略文件,必须先把它们从staged中移除

所以,解决方案:
1 创建  .gitignore file, 将所有的你需要忽略的文件,全部忽略掉。
 注意,这时候你有自己的依赖项目的话,也要在自己的依赖项目里,创建
 .gitignore file.

2 remove the git cached  file
git rm -r -f --cached ./
    --cached             only remove from the index
    -f, --force           override the up-to-date check
    -r                        allow recursive removal
   .  or  ./                 you want remove index directory

3  git  add .

4  git status   
you can look this file status

5  git push 

or 

git push --set-upstream master master


references:
http://stackoverflow.com/questions/11451535/gitignore-not-working

https://help.github.com/articles/ignoring-files/


http://t.hengwei.me/post/gitignore文件不起作用/#


Sunday, February 28, 2016

git 小技巧

Git  的小技巧


查看git的 log  图形化:
git log --graph --pretty=oneline --abbrev-commit

Git 分支管理

如何管理的自己的Git分支呢?

分支的管理是Git 最牛逼之处

1   如何管理日常的开发分支

git checkout -b dev

如何merge呢?
当我们在dev 开发完毕之后,我们需要回到自己的master 分支,可能有的人也从 master 分支,创建了新的分支 比如:  git checkout -b devA    这个时候,你该如何merge  code?
如果使用  git checkout master
git merge dev
这个时候的merge 只是将指针 直接指向了 dev 的工作区,在git里叫做 快照合并。

所以这个时候我们应该使用:
git merge --no-ff dev -m "@Hades merge devHades"
因为这里直接生成了新的节点,所以这里需要提交一下 commit info.

使用--no-ff参数后,会执行正常合并,在Master分支上生成一个新节点。为了保证版本演进的清晰,我们希望采用这种做法


2  git  开发分支管理

分支管理
开发过程中,我们往往不是一个人在开发。

git init 初始化的时候,会生成 origin/master 分支。
我们的发开分支  dev
我们的发布的分支  release

dev 是更新最快的分支,我们平时产品的开发维护都是在dev上进行的,但是,我并不建议所有人都在git 分支开发,我觉的只有  TeamLeader 来管理dev 分支。 然后负责,将 dev 分支测试稳定之后  同步到 master 分支! 
我们谈谈开发的时候,如果我们每个人提交代码的时候都提交到 dev 分支,这个跟svn 又有什么区别呢?所以,每一个开发者都要有自己的dev 分支,分支名字建议:  dev+英文名字
这样子可以区分每个分支的是谁来开发和维护。 这样子,我们每个人开发完毕之后, 自己测试没什么大的问题。就可以将自己的devA 的分支,同步到dev 分支。由 TeamLeader 同步到 master  or release branch! If your compay just have one member, You need't do this!

关于 release 分支,他只是用来发布包的时候出来的,我们可以根据自己需要自己处理!
我的方式是: 我们的master分支是最新的代码的分支,也是稳定版本的分支,我们需要发新的版本的时候,我们都需要从master 代码merge 过来。 当需要直接需改发布版本的问题的时候,我们可以直接从release 分支checkout bug 分支,进行管理,修改完毕之后,直接将bug 分支删除!




参考:
http://www.ruanyifeng.com/blog/2012/07/git.html

Monday, February 22, 2016

Git 服务器的搭建 教训

Git  的搭建,在服务器端必须要有添加用户的权限,所以一般用户的权限是无法配置的Git仓库的,所以,你需要有 root 权限。


当你,建立完仓库之后,克隆岛本地之后,需要提交代码!

这里一提交Android 代码为例子,

1  ,gitignore

/.gitignore

.gradle
/gradle
/local.properties
/.idea/*

*/build
*/gen
*/*.iml
*iml

.DS_Store



2  不需要的文件, 提交的时候 尽量的只提交 原始的文件。 自动生成的文件不要提交!
原则,
a  所有本地生成的文件 都不提交
b 所有运行时生成的文件 都不提交



所以的build 文件夹一律不提交

.iml  文件不提交


为什么不提交呢?
因为,加入你提交了。在建立新的分支的时候, 每个本地的文件都不同。你需要更新的文件太多了,尽管你没有动过,但是 系统动过了。也算是动过的文件!




Friday, January 22, 2016

Android Git 项目的规范教程

1  Git 规范

1 克隆仓库
git clone git@IP:路径/gitname.git

2 第二步:需要更新仓库的信息
git pull

3 第三步: 创建自己的分支

git branch release
git branch dev

release  发布的版本
dev        开发版本

具体的项目,加载release之后 
例如:
git branch releaseMSE

为了避免冲突的发生,我们应该定义这样的命名模式:

研发版本(release/dev)+项目名称(简称)+开发者的信息(自己的英文名字)

当我们开发完成自己的功能之后,就merge 到 devMSE 的版本,
测试如果没有问题,就merge 到 releaseMSE!

确保代码的稳定性!














Thursday, January 21, 2016

史上最快在VPS搭载git 服务教程


in the VPS

1   useradd git

2   passwd git

3   cd /home/git

git  init --bare  test.git

4   cd /home/git
   chmod 777 git -R

5   in the local PC

 git clone git@IP:/home/gitA/hades.git

Tuesday, January 12, 2016

Gitolite+Gitweb配置实现Git权限管理教程

Git是一个什么东西我就不介绍了,下文介绍的主要是说Git权限的一个管理工具配置了,有兴趣的和小编来学学吧。
Xdesc

文章中使用的server,指的是的服务器端的公网ip。
/mnt是我的阿里云外挂盘,新建用户不指定目标位置,会自动在/home下生成。
Gitolite配置
1、在指定目录/mnt/git下建立一个git的用户并给用户git设置密码。(服务器端-用户:root)
useradd -d /mnt/git -s /bin/bash git
passwd git
测试是否建立成功,如果通过ssh连接成功即证明用户已经建立成功。
ssh git@server
2、clone gitolite(服务器端-用户:git)
// 切换到git用户
su git
// 切换到git根目录
cd
// clone gitolite
git clone https://github.com/sitaramc/gitolite.git
成功后会在根目录看到一个gitolites的目录。
3、客户端生成秘钥(客户端)
ssh-keygen
会在你登录的用户的目录下找到.ssh目录,我的目录是C:\Users\new\.ssh,复制id_rsa.pub到d盘根目录。
通过ssh上传id_rsa.pub,并重命名为admin.pub。
// 切换到d盘目录执行
scp id_rsa.pub git@server:admin.pub
执行完成后,切换到服务器端可以在git用户的根目录下找到admin.pub
4、开始安装gitolite (服务器端-用户:git),所有操作都是在git的根目录。
注意点:
进入.ssh目录,如果有authorized_keys,删除即可。
// 新建bin目录
mkdir bin
// 安装gitolite,默认会安装到bin,如果想安装到你自己之的指定的目录请参考官方安装 -to
gitolite/install -ln
// 配置秘钥
bin/gitolite setup -pk admin.pub
测试是否执行成功
首先git根目录下是否生成了projects.list和repositories
同时可以进入.ssh,可以看到新生成的authorized_keys,以后每一次提交新用户都会写到这个里边。判断是否用户添加成功,看这个里边文件是否新增了那个用户的key即可。
5、客户端clone gitolite-admin(客户端)
// 结尾不需要加.git
git clone git@server:gitolite-admin
6、添加新用户(客户端)
修改gitolite-admin/conf/gitolite.conf
@developer = weiwei1628 mac
repo gitolite-admin
RW+ = weiwei1628 mac
repo testing
RW+ = @all
repo anhei
RW+ = @developer
将新用户的key都放到keydir
push到服务器即可,查看是否成功,去服务器进入git用户,查看.ssh/authorized_keys,里边会多了新的key。
Gitweb配置
1、安装(服务器端-用户:root)
yum install gitweb
2、配置(服务器端-用户:root)
/etc/gitweb.conf
$projectroot = "/home/git/repositories/";
3、重启httpd(服务器端-用户:root)
service httpd restart
即可看到gitweb的网站,但是会出现404找不到项目的情况。
这个问题是权限问题,查不不少资料,也遇到不少坑。
最终的解决方案:
首先要修改/home/git/.gitolite.rc中的UMASK,将0007修改为0027。
修改git及其根目录的读写权限为 755。
// 切换到root,在root根目录执行
chmod -R 755 /mnt/git
网上有配置方法,但是gitweb是找到项目了。但是客户端有clone不下文件了。提示秘钥没权限
chmod g+r /mnt/git/projects.list

chmod -R g+rx /mnt/git/repositoriesGitolite+Gitweb配置实现Git权限管理教程
分享代码开始




Sunday, January 3, 2016

Can't update: no tracked branch No tracked branch configured for branch master. To make your branch track a remote branch call, for example, git branch --set-upstream master origin/master

Today , I meet this question:


Can't update: no tracked branch

No tracked branch configured for branch master. To make your branch track a remote branch call, for example, git branch --set-upstream master origin/master

Because, my android studio check code chose git to control this code! lay to this question:



you  just chose your version :




Ok !