欢迎各位兄弟 发布技术文章
这里的技术是共享的
git clone git://github.com/facebook/hiphop-php.git
查看服务器上的所有分支
[huzg@slave3 hiphop-php]git branch –r
输出结果:
origin/HEAD -> origin/master
origin/HPHP-2.0
origin/a832f349d8caf0de8c7df671d03c90a5e078fb53
origin/master
查看当前有效分支:
[huzg@slave3 hiphop-php]git branch
* master
更新 HPHP-2.0 分支 :
[huzg@slave3 hiphop-php]$ git checkout -b HPHP-2.0
输出结果如下:已经选择 HPHP-2.0 分支了,如果已经有该分支就不用 -b 了, -b是先建分支
Switched to a new branch 'HPHP-2.0'
查看当前有效分支,此时有效分支变为 :HPHP-2.0
[huzg@slave3 hiphop-php]$ git branch
* HPHP-2.0
Master
Git 更详细操作见:
http://blog.csdn.net/linuxdriverdeveloper/article/details/7321485
http://xxw8393.blog.163.com/blog/static/37256834201010309569903/
fatal: Not a git repository (or any of the parentdirectories): .git
是由于 git 没有进入到目录中
The file will have its original line endings inyour working directory.
当报这个警告时是由于文件夹远程不存在,但是不影响提交
git tag
例子:
D:\git_programs\hiphop_extension>git tag
0.1.3
git tag -a ice-1.0 0d0fc38441 -m "ice hhvm 1.0"
解释:
-a ice : -a 是创建 ice 是名称
0d0fc38441 这个是你 commit 的 ID
可以通过 git log 获取:
也可以通过网页中的 commit 获取
如果不加 commit 的标示,那么就是最后的,如果加了,可以在中间打上版本的标签,这个很好
-m “ ice hhvm 1.0 ”: 是描述
git push origin master
git push origin --tags
注:
–tags 前面是 2 个横杠 (-)
如果这里错误了会如下错误:
error: src refspec –tags does not match any.
error: failed to push some refs to'https://github.com/huzhiguang/hiphop_extensi
on.git'
正确后会提示:
Username for 'https://github.com': XXXXXXXX
Password for 'https://XXXXXXXXXX@github.com':
Counting objects: 1, done.
Writing objects: 100% (1/1), 166 bytes| 0 bytes/s, done.
Total 1 (delta 0), reused 0 (delta 0)
To https://github.com/huzhiguang/hiphop_extension.git
* [new tag] ice-1.0 -> ice-1.0
然后你去你的 git 上查看就会有新的了的 tag 版本了
注:
--tags 参数表示提交所有 tag 至服务器端,普通的 git push origin master 操作不会推送标签到服务器端。
git tag -d ice-1.0
执行后运行 git tag 可以查看是否已经删除了
git push origin :refs/tags/ ice-1.0
删除后:
Username for'https://github.com': xxxxx
Password for'https://xxxxxx@github.com':
Tohttps://github.com/huzhiguang/hiphop_extension.git
- [deleted] ice-1.0
这表示远程的已经删除了
:refs/tags / ice-1.0
红色部分表示 tag 名称
参考:
http://www.iteye.com/topic/1126153
参考:
http://rogerdudler.github.io/git-guide/index.zh.html
创建新文件夹,打开,然后执行
git init
以创建新的 git 仓库。
执行如下命令以创建一个本地仓库的克隆版本:
git clone /path/to/repository
如果是远端服务器上的仓库,你的命令会是这个样子:
git clone username@host:/path/to/repository
例子:
git clone https://github.com/huzhiguang/hiphop_extension.git
这里需要用 https 的,否则你提交等操作无法进行
你的本地仓库由 git 维护的三棵“树”组成。第一个是你的 工作目录,它持有实际文件;第二个是 缓存区( Index ),它像个缓存区域,临时保存你的改动;最后是 HEAD ,指向你最近一次提交后的结果。
你可以计划改动(把它们添加到缓存区),使用如下命令:
git add <filename>
git add *
这是 git 基本工作流程的第一步;使用如下命令以实际提交改动:
git commit -m " 代码提交信息 "
现在,你的改动已经提交到了 HEAD ,但是还没到你的远端仓库。
例子:
git add a.php
git commit –m “test a.php”
这时只是把代码提交到了本地缓存
你的改动现在已经在本地仓库的 HEAD 中了。执行如下命令以将这些改动提交到远端仓库:
git push origin master
可以把 master 换成你想要推送的任何分支。
如果你还没有克隆现有仓库,并欲将你的仓库连接到某个远程服务器,你可以使用如下命令添加:
git remote add origin <server>
如此你就能够将你的改动推送到所添加的服务器上去了。
在你当前的分支下:
git branch 查看,可以通过 gitcheckout ice 切换(如果你有多个的话,默认是master )
例子:
git push origin master
推送到 master 上
git push origin ice 推送到 ice 分支上
这时你去你的 git 上查看,就可以看到已经上传到远程服务器的内容了
创建一个叫做“ feature_x ”的分支,并切换过去:
git checkout -b feature_x
切换回主分支:
git checkout master
再把新建的分支删掉:
git branch -d feature_x
除非你将分支推送到远端仓库,不然该分支就是 不为他人所见的:
git push origin <branch>
例:
git checkout –b ice ( 没有的时候可以用 –b 创建 )
如果存在 branch ,那么直接切换即可,如:
git checkout master
推送到远程仓库
git push origin master
要更新你的本地仓库至最新改动,执行:
git pull
以在你的工作目录中 获取( fetch ) 并 合并( merge ) 远端的改动。
要合并其他分支到你的当前分支(例如 master ),执行:
git merge <branch>
两种情况下, git 都会尝试去自动合并改动。不幸的是,自动合并并非次次都能成功,并可能导致 冲突( conflicts )。 这时候就需要你修改这些文件来人肉合并这些冲突( conflicts ) 了。改完之后,你需要执行如下命令以将它们标记为合并成功:
git add <filename>
在合并改动之前,也可以使用如下命令查看:
git diff <source_branch><target_branch>
例:
git pull 从远程获取最新改动
git merge ice
比如当前的 branch 是 master ,那么就是将 ice 这个分支的内容合并到 master中,但是可能会发生冲突
在软件发布时创建标签,是被推荐的。这是个旧有概念,在 SVN 中也有。可以执行如下命令以创建一个叫做 1.0.0 的标签:
git tag 1.0.0 1b2e1d63ff
1b2e1d63ff 是你想要标记的提交 ID 的前 10 位字符。使用如下命令获取提交 ID:
git log
你也可以用该提交 ID 的少一些的前几位,只要它是唯一的。
假如你做错事(自然,这是不可能的),你可以使用如下命令替换掉本地改动:
git checkout -- <filename>
此命令会使用 HEAD 中的最新内容替换掉你的工作目录中的文件。已添加到缓存区的改动,以及新文件,都不受影响。
假如你想要丢弃你所有的本地改动与提交,可以到服务器上获取最新的版本并将你本地主分支指向到它:
git fetch origin
点击 setting
然后点击:
Click Delete this repository in the Danger Zone™area
然后弹出警告框:
你不输入项目名称时, I understand the consequences, delete this repository这个是虚的点击不了;
你需要输入名字,才可以删除;
但是删除时要谨慎;
参考:
https://help.github.com/articles/deleting-a-repository
首先点击 setting
然后点击 collaborators
然后输入合作者的账号,搜索出后,点击 Add 即可
选择 repositories
然后点击 New
然后点击 create reposltory
创建好后,会显示:
git rm php/ice/Ice.php.bak
注: rm 后面需要跟上具体的路径
git commit –m “delte Ice.php.bak”
更新远程分支:
git push origin ice
然后上传后,更新同步本地:
git pull
配置 host
184.50.87.50 a248.e.akamai.net
首先需要 fork 你想要进行合作的项目:
比如我 fork 的是 hiphop 那么就点击这里:
然后再你自己的 git 中就会 fork 出一个项目出来
然后你可以修改你的项目,然后点击 new pull request
然后点击 click to create a pull requeset for this comparsion
然后点击标题,添加内容
点击 send pull request
参照了:
http://www.worldhello.net/gotgithub/04-work-with-others/010-fork-and-pull.html
(1) 首先 fork 服务
去已经有的项目中进行 fork 一个项目,然后也可以进行 pullrequeset, 这个操作参见5.14
(2) 遇到问题
当原来的版本服务修改时,我们 fork 的服务就不好进行贡献代码,那么我们需要进行与远程的服务进行同步,那么下面就是同步的过程
(3) 克隆自己已经 fork 的服务到本地
git clone https://github.com/huzhiguang/hiphop-php.git
(4) 添加一个远程服务
git remote add upstream https://github.com/facebook/hiphop-php.git
格式:
git remote add 远程仓库名称 远程仓库地址
(5) 抓取远程服务信息
git fetch upstream
格式:
git fetch 远程仓库名称
(6) 合并远程仓库信息到本地仓库中
git merge upstream/master
合并的过程中会遇到错误:
Auto-merginghphp/runtime/vm/type-profile.cpp
Auto-merginghphp/runtime/vm/type-constraint.h
Auto-merging hphp/runtime/vm/type-constraint.cpp
Auto-merginghphp/runtime/vm/runtime.cpp
CONFLICT(content): Merge conflict in
Auto-merginghphp/runtime/vm/repo-helpers.cpp
Auto-merginghphp/runtime/vm/php-debug.cpp
Auto-merginghphp/runtime/vm/object-allocator-sizes.cpp
Auto-merginghphp/runtime/vm/name-value-table-wrapper.h
Auto-merginghphp/runtime/vm/name-value-table-wrapper.cpp
Auto-merginghphp/runtime/vm/member-operations.h
Auto-merginghphp/runtime/vm/member-operations.cpp
Auto-merginghphp/runtime/vm/indexed-string-map.h
Auto-merginghphp/runtime/vm/fixed-string-map.cpp
Auto-merginghphp/runtime/vm/event-hook.cpp
Auto-merginghphp/runtime/vm/debugger-hook.cpp
Auto-merginghphp/runtime/vm/backup-gc.cpp
Automatic merge failed; fix conflicts and then commit the result.
上面标示的红色加粗位置提示了 hphp/runtime/vm/runtime.cpp 位置的文件有冲突;
查看该文件:
<<<<<<<HEAD
// 自己的代码
/*
author:huzhiguang
date:2013/7/31
function:string_md5function don't free and have memery leak
*/
//md5 = MD5(string_md5(s, sz, false,out_len));
char * string_md5_char=string_md5(s, sz,false, out_len);
md5 = MD5(string_md5_char);
free(string_md5_char);
=======
// 远程服务代码
char * md5str = string_md5(s, sz, false,out_len);
md5 = MD5(md5str);
free(md5str);
>>>>>>> upstream/master
这里提示了冲突内容,我们将冲突的内容删除后,然后保存文件;
(7) 合并代码成功后,我们进行添加和提交代码
git add *
git commit –m “sync code”
git push origin master
(8) 同步完成后,查看远程服务中的提交会有最新的同步后的结果
(9) 在 pull request 中如果有由于冲突的文件造成的行等小差异解决后然后提交即可
可参照: