使用git高效管理项目

 

简单在一个目录下拉取别人的一个工程

 

1.在任何一个目录下新建一个文件夹

比如:work,然后cd 切换到工作目录

 

2.仓库初始化

git init

 

3.从某个地址拉取工程到自己的工作目录

git clone [email protected]:2dxproj/AdventureEliminate.git

 

备注:比较大的工程往往用http协议下载不下来,这个时候可以用ssh协议,添加公钥,然后就可以拉取到指定目录下。我开始用http协议拉取了6次,一直出错,因此这个很重要!

 

4.git学习资料

官方文档

https://github.com/progit/progit/tree/master/zh/  

 

廖雪峰git学习

http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

 

git最佳实践

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

 

git官网权威解释
http://git-scm.com/book/zh/v1

 

忽略文件等解释
https://juejin.im/post/58c7a4cf61ff4b005da83c42

 

秘钥生成等

https://juejin.im/entry/5809dbc42f301e005c2f27d9

 

自己创建项目,并且推送到git上

1.第一次新建项目

在git上先新建项目

2.cd到想要工作的目录下

然后git clone下来新建的项目

3.将用ide比如:pycharm新建python项目,然后将新的项目添加到新建的项目中

提交更改,推送

4.推送

git config --global push.default matching

git push

Username for 'https://git.oschina.net': jianan
Password for 'https://[email protected]':数字+拼音

这样才可以推送上去

 

mac终端配置

http://git.oschina.net

iterm2
https://iterm2.com



oh my zsh
http://ohmyz.sh


Homebrew
http://brew.sh/index_zh-cn.html


拉取
➜  work git:(master) ✗ git submodule update --init
➜  work git:(master) ✗ cd naval
➜  naval git:(master) ✗ git submodule update --init
Submodule 'frameworks/cocos2d-x' ([email protected]:young40/cocos2d-x.git) registered for path 'frameworks/cocos2d-x'
Cloning into 'frameworks/cocos2d-x'...
remote: Counting objects: 11975, done.
remote: Compressing objects: 100% (7566/7566), done.

命令行下面的快捷键
tab按键是补全作用
gst 查看状态
l 查看文件目录
fetch 分支相关













 

工程运行

拉取保证得到最新的资源

cd ~/Documents/work/naval_design

git pull 拉取

 

当遇到冲突时,这样可以修改冲突

git difftool src/model/LocalData.lua

当git diff直接这样子写不加参数的话,会直接显示出来该更前后对比,因此首先执行它比较好。

git diff . 这样可以直接查看文件前后的改动,非常实用

配合gst来查看状态

git checkout src/model/LocalData.lua 这样回退状态

 

s 发布 

alias s="$COCOSTUDIO publish -s -f ~/Documents/naval_work/naval_res/proj/ui/ui.ccs -o ~/Documents/naval_work/naval/res"

可见s是当在cocostudio中修改了资源时,需要发布到naval/res下的ui中,可见它只是只发布csb。如图所示:

 

e 加密拷贝(花费大概1分钟,时间较长,比如当增加图片时使用,因为要拷贝到资源中)

alias e="cd $NAVAL_JAVA_DIR && java -jar exportExcel.jar && date && cpskip && cd -"

    public static void main( String[] args )
    {
    	copyRes( );
    	generateExcel( );
    	generateErrorNo();
    	generateText( );
	generateModelAndCommand( );
	generateResMetadata( );
<span style="white-space:pre">	</span>encrpytOutputRes( );
    }
public static void copyRes(){
    System.out.println( "开始复制res...." );
    File srcFile = new File(  "../../../../naval_res/res" );
    File destFile = new File( "../../../res" );
    FileUtils.copyDirWithout( srcFile, destFile, "." );
    System.out.println( "复制res结束...." );        
}

将naval_res/res下资源

拷贝到: naval/res下

可见e命令是将除了ui之外的资源拷贝到naval_res下。

其余的代码是拷贝excel,command协议等等内容了。

git push推送

naval_design也要保持为最新的

每次换ip,删除文稿下的game.bin文件,然后重新运行即可。

在xcode中运行mac端naval_desktop 把c++代码编译好

运行lua端进行打包

搜索 the_silver_searcher安装

brew install the_silver_searcher

cd /Users/jianan/Documents/work/naval_res

ag -i 搜索内容
 

修改UI

首先退出cocostudio

naval_res git:(master) gst

On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

modified:   proj/ui/ui.ccs
no changes added to commit (use "git add" and/or "git commit -a")
➜  naval_res git:(master) ✗ git checkout proj/ui/ui.ccs
➜  naval_res git:(master) gst
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean
➜  naval_res git:(master) git pull
Already up-to-date.
➜  naval_res git:(master) gst
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean

















➜  naval_res git:(master)

修改lua及其资源文件并提交

git  add 需要提交的文件

gst

git commit -m "修改:..."    (这个只是提交到本地库,必须进行下面的git push)

git pull

:q (这个提交的过程中偶尔用到)

git push (必须这样才会提交到服务器)

 

命名规则

 btn_ => Button
 lbl_ => BitmapFontLabel
 lbl_ => Text
 img_ => Image
 spr_ => Sprite
 node_ => Node
 pnl_ => Panel
 var_ => 其他类型
 
 chk_ => CheckBox
 pag_ => PageView
 lod_ => LoadingBar
 sld_ => Slider
 inp_ => TextField
 par_ => Particle
 til_ => Map
 adi_ => Audio
 scr_ => ScrollView
















去公司首先做的事情

1.cd /Users/jianan/Documents/work/naval  

    git pull

2.cd /Users/jianan/Documents/work/naval_design

    git pull

3.cd /Users/jianan/Documents/work/naval_res

git pull

4.发布资源

s && e

说明:e命令下,如果jar包不能执行,那么:

cd /Users/jianan/Documents/work/naval/frameworks/tool/warship

java -jar /Users/jianan/Documents/work/naval/frameworks/tool/warship/exportExcel.jar
 

submodule 托管项目

1.在任何一个目录下新建一个文件夹

比如:work,然后cd 切换到工作目录。(切换到的目录,以后再进行操作的话,就会在当前目录生效)

2.仓库初始化

git init

3.submodule初始化

git submodule init

4.将http地址上的库添加到submodule上

git submodule add (http地址)

excel命令

1.打开指定路径excel   open excel/.DictMeta.xlsx

回退所有状态

git checkout .

当后面有参数时,如果是目录,则切换到此目录,如果是lua文件,则回退lua文件。
 

查看日志

git log --author="jianan"  查看具体人提交的日志

git log 查看所有人提交日志

git log -p XXX(hash值)  查看具体hash提交的东西

查看隐藏文件

cd /Users/jianan/Documents/naval_work/naval_design/excel

ls -a即可查看隐藏文件

open .DictMeta.xlsx
 

git 提交规则

1.不是我改的,不能提交。git status后,一定先checkout,再拉取。只提交自己修改的!!!

2.打包资源前,一定要保证资源是整洁的!发现修改了就恢复掉。

adb用法小结

➜  ~ /Users/jianan/Documents/Android/sdk/platform-tools
➜  platform-tools ./adb logcat | grep cocos  

platform-tools ./adb install /Users/jianan/Desktop/naval-release-signed\ 

git merge

1.分支合并(只合代码库和加密库.例如:合并V1.2.3Oversea到master上)

cd naval(V1.2.3Oversea)
git pull

cd naval(master)
git merge V1.2.3Oversea
解决冲突

cd naval_encrypt(V1.2.3Oversea)
git pull
cd naval_encrypt(master)
git merge V1.2.3Oversea
解决冲突












合并技巧:当你确定要用V1.2.3Oversea上的东西,比如资源时,可直接将其覆盖到master上,然后提交更改即可。

 

2.cherry-pick命令合并部分修改(例如:将V1.2.3Oversea上某个提交合并到master上)

cd naval(V1.2.3Oversea)
git pull
查看提交的commit hash值,例如是XXX


cd naval(master)
git cherry-pick XXX
解决冲突








 

3.删除分支(先删除本地分支,再删除远程分支  例如:删除V1.4.5分支,删除分支前必须先在其它分支)

gsfr git branch -D V1.4.5

gsfr git push origin :V1.4.5

 

4.回退到某个提交(可以达到撤销merge等)

git checkout hash

git checkout V1.4.7恢复

查看一个具体的提交的commit hash值(已经提交git的也撤销远程的) 例如XXX

 

正确(注意后面那个origin dev 需要指定下远程分支):

git reset --hard 0cde337c48fe626cd25d4e2c0ff5f67786f2d978 && git push -f origin dev

错误:

------git reset --hard <commit_id> && git push origin HEAD --force-----

经过验证:用这个错误的,看着是回退了,但是执行git pull又拉取下来了。尴尬!!!

 

撤销merge还可以用: git merge --abort

(我发现别人还git checkout 到commit hash值,然后又这样打入分支名称来恢复)

5.撤销commit(git add .后撤销某个commit)

git reset .

6.在本地创建并且同步服务器上别人刚创建的分支(比如:我在自己mac上创建V1.4.5,同时在imac上拉,发现是拉不到V1.4.5的,但是能直接切换; 或者别人创建了V1.4.7分支,我在我电脑上想切换到这个分支)

*1如果是别人创建并提交的分支,在自己机器上创建并且同步下来。(git pull = git fetch + git merge)

gsfr git fetch

gsfr git checkout -b oversea_V1.1.1 orign/oversea_V1.1.1      这个可以让本地看到V1.4.5分支

这样更靠谱,直接指定远程分支和本地分支名字:

git fetch origin feature-usercenter:feature-usercenter

 

git fetch细节:

远程:origin/master

本地:origin/master   master

当你git fetch的话,是把本地的origin/master更新到最新,但是你看到的是本地master,并没有合并。因此git fetch比git pull安全,git pull比git fetch多了一步,直接给你合并了。

 

*2如果想用submodule递归在naval下创建分支,并且直接推送到远程分支上,可以这样一起创建:

git checkout -b dev && git push origin dev && git branch --set-upstream-to=origin/dev dev

删除分支:

git branch -D test && git push origin :test

 

单一的创建分支的话,比如在naval下:

git checkout -b oversea_V1.1.1

git push origin oversea_V1.1.1

这样创建时,注意如果naval有子工程,那么这样是创建不了的。这时候你在naval上,用加gsfr递归创建即可

//设置新的url
git remote set-url origin [email protected]:hero/RTSPowerCI.git

git push --all



//查看远程git地址
git remote show origin

git stash


git stash   //隐藏修改     这样可以起一个名字   git stash save "aaa" 
git stash list  //查看修改列表
git stash pop //恢复修改(也就是可以查看到更改)


撤销掉所有更改

git stash -u && git stash clear

切换分支注意事项

 

ui.ccs的改动  当切换分支时,注意将cocostudio关闭掉,不然如果切换到的分支有这个模块,而切换前的没这个模块,ui.ccs就会有更改,这样可能导致删除。ui.ccs有更改的话,一定要查看下。占用内存的不会被切换(占用的东西,是不会被切换的)。 

 

查看分支

查看远程分支:以列表形式显示

git branch -va
 

查看本地分支

git branch

添加navalVersion库

1.查看一个git托管的文件的地址
  git remote -v

2.得到git仓库地址: 
  [email protected]:naval_cp/naval.git

3.open  ~/.ssh

4.拷贝进去文件

5.设置下权限为600
sudo chmod 600 kongzhong_git

6.git clone [email protected]:naval_cp/naval.git












强制添加-f选项

假如在.gitignore文件中被忽略了, 比如忽略Icon* ,这样就会忽略所有以icon开头的图片,git默认不区分大小写的。那么查看git状态是查看不到更改的,为了能添加到git中帮你托管,那么git add -f  文件路径,这样就会强制添加进来,帮你托管。

 

删除文件

 

*

用 git rm 来删除文件,同时还会将这个删除操作记录下来;
用 rm 来删除文件,仅仅是删除了物理文件,没有将其从 git 的记录中剔除。

*

当我们需要删除暂存区分支上的文件, 同时工作区也不需要这个文件了, 可以使用 

git rm file_path

*

当我们需要删除暂存区分支上的文件, 但本地又需要使用, 只是不希望这个文件被版本控制, 可以使用

git rm --cached file_path

file_path 为文件路径

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章