Git tag和branch相关记录

我们可以通过git log来查看某个commit的相关commit-id,然后在对某个位置进行相关标记。

相当于说。我们对此提交定位为一个特定的点,这个点的软件版本为v1

$ git log

//查看log

$ git tag v1 0f32fe

//

可以直接通过git show 0f32fe查看这次commit-id对应的提交,或者直接通过git show v1来查看



我们在0f32fe这时候打了tag为v1,之后继续开发。同时我们将该tagpush到origin的repository上去。之后其他用户pull下来该tag后重新创建用于发布的branch,进行发布



以上大概可理解为

$ git log //查看log

$ git tag v1 0f32fe //对某个commit 打上标记为v1

$ git push –tags //push所有的tag



以下为第二个用户的操作

$ git pull //获取所有的tag

$ git branch version_v1 v1 //创建一个基于v1 tag branch

$ git checkout version_v1 //切换到version_v1分支上,然后打包发布


阅读全文

git submodule


git submodule 可以在主库下增加一个新的二级module,便于在当前库开发时候和某些其他文件分离开发,通常使用在某个项目中,Core(system)核心和module区分开发。公司现在就是这样做的。

进行submodule开发,需要有两个库,一个是主库,一个是submodule库

$ mkdir main

$ mkdir submodule

$ cd main

$ git init

$ touch main.php

$ git add main.php

$ git commit -m ‘main init’

$ git config receive.denyCurrentBranch ignore

$ cd ../submodule

$ git init

$ touch submodule.php

$ git add submodule.php

$ git commit -m ‘submodule init’

$ git config receive.denyCurrentBranch ignore



如上,我们创建了两个git库,分别为main和submodule,现在进行合并submodule库为main库的submodule

首先克隆main库、submodule库

$ cd /a/new/path

$ git clone git@localhost:/path/to/main

blablablabla

$ ls

main

克隆成功

$ git clone git@localhost:/path/to/submodule

$ ls

main submodule

这样,submodule库也clone下来了。



第二

在main库中增加submodule库

$ cd main

$ git submodule add git@localhost:/path/to/submodule

blablabla

$ ls

submodule main.php

可以看到submodule目录和main.php文件了

$ git status

# On branch master

# Changes to be committed:

# (use "git reset HEAD <file>…" to unstage)

#

# new file: .gitmodules

# new file: submodule



新增了新的文件和目录

$ git commit -m ‘add submodule’

$ git push

//push到remote的repository上去



$ cd ../

$ git clone git@localhost:/path/to/main test

blablabla

$ cd test

$ git pull

balbalbal

$ ls

main submodule

$ git submodule

-e5530773377c8301fa471468dc6c075d9f0909e5 submodule

可以看到submodule



下面我们尝试更新submodule

$ cd ../submodule //切换到submodule repository下,并非test或main repository的submodule目录下

$ touch bootstrap.php

$ git add bootstrap.php

$ git commit -m ‘add bootstrap.php’

$ git push

blablabla

//创建了一个bootstrap.php的文件进行了上传



在main中获取新的submodule代码

$ cd ../main //进入main 的repository

$ git pull

直接进行pull,发现无任何数据下来

$ cd submodule

$ git pull

页面提有文件pull下来

$ cd ../

$ git status

modified submodule(new commit)

$ git add submodule

$ git commit -m ‘update submodule add bootstrap.php’

$ git push

blabalbal提示push成功



$ cd ../test

$ git pull

//提示pull下来数据

阅读全文

Git rev-parse

git rev-parse 通常是一个用来获取commit-id的命令



git rev-parse HEAD





git rev-parse master

git rev-parse refs/heads/master



git rev-parse 6652

6652为一个commit-id



A为一个tag,tag指向一个commit

git rev-parse A

git rev-parse refs/tags/A

获取tag的commit-id



git rev-parse A^

git rev-parse A^0

Atag指向的commit-id



git rev-parse A^1

Atag指向的commit-id的第一个parent提交

git rev-parse A^2

Atag指向的commit-id的第二个parent提交

git rev-parse B^0

阅读全文

Git reset

git reset命令通常对于已经commit后的信息进行重置使用,通常有一下四种用法:

git reset –hard

git reset –soft

git reset –mixed

git reset –

1、git reset –hard

一次commit后我们对这次commit进行reset的时候附加–hard参数,会使这次commit的所有的文件回复到commit时的状态,这次commit后的文件都会被删除,workspace index中都不会存在

2、git reset –mixed

一次commit后,使用reset进行重置时附加–mixed参数,会将commit重置到上次文件中,workspace中文件不变

3、git reset –soft

一次commit后,使用reset进行重置时附加–soft参数,会将commit重置到index这步,直接进行commit就能直接进行push了。

4、如果已经通过git add将文件加到index了,可以通过第四种方法,从index中将文件撤销出来

git reset – file_name



未修改 0 workspace1 index 2 repository 3

git reset –hard 文件从3reset到0

git reset –mixed 文件从3reset到1

git reset –soft 文件从3reset到2

git reset – 文件从2reset到1

git checkout 文件从1reset到0

阅读全文

Git init

$ git init 可对当前目录进行git初始化设定,初始化设定时,会在当前目录创建.git目录。用户git管理

初始化后的repository没有branch,需要进行一次add 、commit后才会创建master分支。



$ git branch

$ touch index.php

$ git add index.php

$ git commit -m ‘init’

$ git branch

* master



初始化后

建议设置git相关属性,详见git config




阅读全文

git fast push

正常情况下,多人协同开发时,可能遇到在push的时候提示push失败,大部分情况下可能是由于个人原因导致用户确实很想将当前文件push上去,可以使用git push -f,强制将当前commit push到origin 的repository中去,但是这样会导致其他用户pull的时候,将其他用户强制push上的文件pull下来,由下一个人进行修正该问题。



为了防止出现这种情况,可以在主库中设定

git config receive.denyNonFastForwards true

阅读全文

bootstrap

bootstrap一般为index.php直接加载,通常位于system(core、libraries)中,kohana中bootstrap在application(modules、projects)中。



spl_autoload_register(Bootstrap::auto_load)



abstract class Bootstrap {

public $base_url;

public $path_info;

public $current_project;

public $project_dir;





//启动函数

public static function setup() {



}



//class自动加载函数

public static function auto_load($class) {



}



//获取path_info函数

public static function get_path_info() {



}



public static function set_project($project) {

define(INITIAL_PROJECT, $project);

self::$project = $project;

self::$project_dir = DIR_LIB. $project. DIRECTORY_SEPARATOR;







}



}





通过获取pathinfo和系统中现有projects继续比较,获取当前project并更新pathinfo,set_projects,设置当前project, 设定$project_config, 同时加载core核心,设定projects,加载$include_dir。等相关信息。调用Core的setup()

阅读全文

Git add

git add 主要是一个将修改后的文件和未跟踪的文件增加到暂存区中的命令,当然,文件删除之后为了增加暂存区,也可是改用该命令



修改若干文件后,git status查看状态,会提示未跟踪的文件和未staged(未增加到暂存区)的文件,可能结果类似如下:





may@Mint:~/workspace/git$ git status
# On branch develop
# Changes to be committed:
# (use "git reset HEAD <file>…" to unstage)
#
# modified: config.php
#
# Changes not staged for commit:
# (use "git add/rm <file>…" to update what will be committed)
# (use "git checkout – <file>…" to discard changes in working directory)
#
# deleted: hello.php
# modified: index.php
#
# Untracked files:
# (use "git add <file>…" to include in what will be committed)
#
# modules/
may@Mint:~/workspace/git$

通过git status,查看到了已增加至暂存区,但死未commit的文件、未增加的文件、未跟踪的文件、以及删除了的文件。

首先,增加index.php进暂存区,使用命令

$ git add index.php

增加未跟踪的文件进暂存区,同样使用命令

$ git add modules/

增加删除的文件进暂存区

$ git add hello.php

$ git statsu 查看一下状态

may@Mint:~/workspace/git$ git status
# On branch develop
# Changes to be committed:
# (use "git reset HEAD <file>…" to unstage)
#
# modified: config.php
# modified: index.php
# new file: modules/bootstrap.php
#
# Changes not staged for commit:
# (use "git add/rm <file>…" to update what will be committed)
# (use "git checkout – <file>…" to discard changes in working directory)
#
# deleted: hello.php
#
may@Mint:~/workspace/git$

发现删除了的文件hello.php没有在git add hello.php的情况下直接增加到暂存区。网上搜索之后发现可在使用该命令的时候增加参数

$ git add -u hello.php

$ git status

查看状态

may@Mint:~/workspace/git$ git status
# On branch develop
# Changes to be committed:
# (use "git reset HEAD <file>…" to unstage)
#
# modified: config.php
# deleted: hello.php
# modified: index.php
# new file: modules/bootstrap.php
#
may@Mint:~/workspace/git$

发现已经增加至暂存区了,直接进行后续的git commit等其他操作。

对于已删除并正确add后文件进行reset,需要使用

$ git reset – file_name

来reset该文件。或者使用

$ git reset HEAD file_name

对于某个我们想删除的文件,无需进行add可直接增加到暂存区中,我们可以使用

$ git rm file_name 进行删除

批量文件增加至暂存区,可直接使用

$ git add directory_name/进行增加

$ git add find ./ -name '*.php' 查找当前目录下所有文件名后缀为.php的文件,增加至暂存区

阅读全文

Mysql修改现有表相关信息

修改现有表名称使用rename



alter table foo rename bar;

alter table old_table_name rename new_table_name;



alter用于对表进行修改。

常用的alter配合使用的还有

add

drop

change

modify



change可直接对某列进行名称的修改

alter table table_name change User user varchar(50) not null;

alter table table_name change column User user varchar(50) not null;



modify是针对某列进行修改,不可修改名称

alter table table_name modify User varchar(50) not null;

alter table table_name modify column User varchar(50) not null;



drop用于删除某列

alter table table_name drop User;

alter table table_name drop column User;

column可加可不加。



add用于增加某列

alter table table_name add column foobar varchar(50) not null;

alter table table_name add foobar varchar(50) not null;



add增加after,设定增加行位置

alter table table_name add column foo varchar(50) not null after bar;

alter table table_name add foo varchar(50) not null after bar;






阅读全文