@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
/////////////////////
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
/////////////////////git介绍
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Git比SVN好的地方在于两点:轻量级、分布式。
其中分布式的意思是Git不需要一个中心服务器,
任何一台使用git的电脑都可以当服务器,建立代码库服务器异常简单。
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
/////////////////////Ubuntu下apt-get安装
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
sudo apt-get install git-core
Windows下使用git,需要cygwin
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
/////////////////////应用场景
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1. 个人使用,不用建专门的代码服务器。
2. 多人维护代码,需要代码建服务器。
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
/////////////////////个人使用
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
假设代码放在/home/usr1/project目录下(非空),那么运行:
git init
git add -f .
git commit -m "init version"
git代码库就建立好了,目录下会多出个.git目录来
git init就是初始化,
git add是标记上要添加的文件,"."表示当前目录,此命令会递归标记所有子目录及文件。
git commit就是把标记上的文件和修改的文件commit到git库里,-m参数是添加对此次commit的注释,
git要求每次commit都必须有注释,如果没有-m参数,将会自动打开一个编辑器(通常是vi或nano)要求输入注释。
以后,如果修改了文件,则运行git commit -m "<comments>"就可以将修改反映到git库,将<comments>替换为你想要的注释。
如果添加了代码文件new_file,则在commit之前运行
git add new_file
如果想把代码克隆一份出来,进入你想克隆到的目录运行:
git clone /home/usr1/project new_project
注意git clone后有两个参数,
第一个参数是源代码目录,也就是含有.git文件夹的目录。
第二个参数是要克隆到的目录,如果省略,则会在当前目录下建立一个与源代码目录同名的目录,在本例中就是./project
克隆出的目录包含克隆前目录的所有代码修改信息,是完全独立的,
即之后在new_project下的所有修改与commit都不会影响原project。
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
/////////////////////多人维护代码
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
需要代码建服务器【这里是ubuntu代码服务器,windows的暂不介绍】
假设代码服务器的IP是10.0.0.2。
git默认用ssh作为网络通讯协议,所以在服务器10.0.0.2上安装ssh:
sudo apt-get install ssh
然后添加用户,比如usr2,home目录是/home/usr2。
以usr2用户登录10.0.0.2,建立一个/home/usr2/project目录来存放代码。
在/home/usr2/project目录下运行:
git --bare init
一条命令就把服务器就建好了。
--bare命令是告诉git当前目录不含代码,以后commit时只用保存修改就可以了。
在本机下载代码与 场景 1一样:【若代码服务器也是编译服务器,一机两用】
git clone /home/usr2/project new_project
如果要在另外的电脑下载代码,运行:
git clone usr2@10.0.0.2:project new_project
此命令会以ssh方式连接10.0.0.2,
如果第一次连接,会询问是否信任该服务器,输入yes后。
然后输入usr2(这里是说当前的,这个usr2只是巧合)用户的密码就可以了。
克隆地址usr2@10.0.0.2:project在home目录,
其实不需要,亲测user@192.168.0.136:/media/Disk1_150G/prj-test,
即使用“用户名@绝对路径”的方式也是可以的。
注意git clone后第一个参数的格式,为<用户名>@<服务器IP>:<相对路径>,
其中<相对路径>是指相对于<用户名>所在home目录的相对路径,
比如此例中,usr2的home目录是/home/usr2,那么此例的路径实际为/home/usr2/project。
<相对路径>不能留空或省略,
如果代码确实是在home目录下,则<相对路径>是".",不含双引号。
如果代码库是空的,会给出警告,不必理会。
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
/////////////////////提交代码到本地git库
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
如果在new_project里修改了代码,且添加了新代码new_file,想把这修改commit到服务器上,先运行:
git add new_file //这里也可以使用git add . 来完成,因为服务器上只会保存修改,所以全部上传也可以。
git commit -m "<comments>" //将<comments>替换为你的注释。这样代码就commit到【当前机器】的new_project了。
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
/////////////////////推到远端库
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
如果想commit到服务器上,则在new_project目录下运行:
git push usr2@10.0.0.2:project master
然后输入usr2用户的密码。
master是分支名
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
/////////////////////备注1
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
如果本机就是服务器,那么IP地址可以写为localhost或127.0.0.1。
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
/////////////////////备注2
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
如果觉得每次输入usr2@10.0.0.2:project很麻烦,
可以为这个URL取个别名my_server:
git remote add my_server usr2@10.0.0.2:project
这样前一条git push命令可以写作:
git push my_server master
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
/////////////////////git操作实例bykll
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
/////////////////////git仓库初始化
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
//以管理员账户build运行
sudo mkdir /backup/aml/m3/git_aml_m3/
sudo chmod 777 /backup/aml/m3/git_aml_m3/
cd /backup/aml/m3/git_aml_m3/
sudo git init
chmod 777 -R .
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
/////////////////////git仓库服务端建立源码快照
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
拷贝源码到当前目录(.git文件所在目录)
cp -rf XXX/release_src/* . //源码拷贝过来
find -name "*svn*" | xargs rm -rf //清除以前svn相关的版本管控信息
cd kernel && make clean && cd - && make clean
du -sh . //查看当前工程目录大小
git add -f . //这里用-f避免漏掉一些必要的文件
git commit -m "amlogic m3 [release_src] [svn => git] by kll 2014-2-27"
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
/////////////////////克隆git工程
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
//以普通用户账户build01运行
build01@build-pc:~/aml/m3$ git clone build01@192.168.1.86:/backup/aml/m3/git_aml_m3/ aml_m3_git //克隆到当前目录中的aml_m3_git目录,aml_m3_git目录不存在会自动创建
Initialized empty Git repository in /home/build01/aml/m3/aml_m3_git/.git/
The authenticity of host '192.168.1.86 (192.168.1.86)' can't be established.
RSA key fingerprint is ee:8b:b6:19:68:fa:fe:e2:21:68:a9:c8:e5:f2:07:05.
Are you sure you want to continue connecting (yes/no)? yes //信任该服务端,确认
Warning: Permanently added '192.168.1.86' (RSA) to the list of known hosts.
build01@192.168.1.86's password: //build01账户密码
warning: You appear to have cloned an empty repository.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
/////////////////////改远端权限
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
//避免远端无权限写入,以管理员账户build运行
build@build-pc:/backup/aml/m3/git_aml_m3$ sudo chmod 777 -R . //↓↓避免以下错误
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
/////////////////////远端无权限时提交错误提示
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Compressing objects: 100% (232816/232816), done.
fatal: Unable to create temporary file: Permission denied
error: pack-objects died of signal 13
error: pack-objects died with strange error
error: failed to push some refs to 'build01@192.168.1.86:/backup/aml/m3/git_aml_m3/'
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
/////////////////////再次提交本地代码到远端master分支
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
build01@build-pc:~/aml/m3/aml_m3_git$ git push build01@192.168.1.86:/backup/aml/m3/git_aml_m3/ master //提交当前分支到远端,并在远端创建master分支,因为第一次提到master分支
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
/////////////////////顺利提交本地代码到远端master分支的打印
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Compressing objects: 100% (232816/232816), done.
Writing objects: 100% (244224/244224), 1.86 GiB | 8.91 MiB/s, done.
Total 244224 (delta 61452), reused 0 (delta 0)
To build01@192.168.1.86:/backup/aml/m3/git_aml_m3/
* [new branch] master -> master
build01@build-pc:~/aml/m3/aml_m3_git$
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
/////////////////////常用分支操作命令
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
远端的分支创建:
由本地创建并推送,或直接在远端以创建本地分支的方式创建
git checkout 分支名 //切换分支
git branch //打印本地分支
git branch -r //打印远端分支
git branch 分支名 //创建指定分支
git branch -d 分支名 //删除指定分支
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
/////////////////////新账户build02从build01账户克隆代码
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
git clone build02@192.168.1.86:/home/build01/aml/m3/aml_m3_git/ aml_m3_git
//克隆完成后及时查看并切换分支
git branch
//看看远端有哪些分支
git branch -r
【拉】远端分支到本地
build02@build-pc:~/gitamlogic/mx/aml_mx_git$ git checkout -b HAMMX0S0 origin/HAMMX0S0
本地 远端
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
/////////////////////查看当前目录git差异
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
git diff .
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
/////////////////////账户1提交代码到本地库并推到远端
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
git status . //当前目录git查看状态,有何异动
git add 目录或文件 //提交新增或修改的文件,删除用rm
git commit -m "" //注释并提交到本地库
推到远端库
git push build01@192.168.1.86:/backup/aml/mx/git_aml_mx/ HAMMX0S0
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
/////////////////////账户2从远端拉更新状态到本地
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
build02@build-pc:~/gitamlogic/mx/aml_mx_git$ git fetch
remote: Counting objects: 35, done.
remote: Compressing objects: 100% (19/19), done.
remote: Total 20 (delta 13), reused 0 (delta 0)
Unpacking objects: 100% (20/20), done.
From /home/build02/gitamlogic/mx/../../../build01/aml/mx/aml_mx_git
* [new branch] HAMMX0S0 -> origin/HAMMX0S0
build02@build-pc:~/gitamlogic/mx/aml_mx_git$
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
/////////////////////版本回溯到某个<commit值>版本
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
git reset --hard 6c2b4e4be1579cf4f1a87123b4ea04325464bd1e
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
/////////////////////将远端的分支【更新】到本地当前分支
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
git fetch
git merge origin/HAMMX0S0
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
/////////////////////build02 clone的代码编译不通过,估计是build01提交的代码忽略了部分文件
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
在build01端执行:
git add -f . //强制全部提交上去
git commit -m "git add -f . //Allow adding otherwise ignored files." //提交到本地库
git push build01@192.168.1.86:/backup/aml/mx/git_aml_mx HAMMX0S0 //推到远端库
build02端再次更新即可
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
/////////////////////删除掉提交多了的文件
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
git rm 文件名
git commit -m "XXX"
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
/////////////////////显示指定版本的详细
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
git show <commit> //eg:git show 28ad252464dc80432379aba68da616566e105d21
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
/////////////////////本地创建新分支并推到远端
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
git branch
git branch HAMMX0S0
git checkout HAMMX0S0
git branch
git push build01@192.168.1.86:/backup/aml/mx/git_aml_mx_20140109/ HAMMX0S0
git branch -r
git branch
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
/////////////////////配置个人信息
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
git config --global user.email "build01@build-pc.(none)"
git config --global user.name "build01"
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
/////////////////////恢复指定文件到某历史版本
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
git log filename
git reset 9aa51d89799716aa68cff3f30c26f8815408e926 filename
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
/////////////////////恢复指定文件的最后一次修改
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
git checkout filename
恢复到最后一次提交的改动:git checkout -- + 需要恢复的文件名
但是,需要注意的是,如果该文件已经 add 到暂存队列中,上面的命令就不灵光喽
需要先让这个文件取消暂存:git reset HEAD -- + 需要取消暂存的文件名,然后再使用第一条命令。
如果感觉命令多了记不住,那就做一两个匿名呗,比如:
git config --global alias.unstage 'reset HEAD --'
git config --global alias.restore 'checkout --'
我们拿 README.md 这个文件举例,比如修改了一段文字描述,想恢复回原来的样子:
git restore README.md即可,
如果修改已经被 git add README.md 放入暂存队列,那就要
git unstage README.md
git restore README.md才能恢复成功。
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
/////////////////////多用户访问 git 库
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
服务端root执行:
groupadd gituser//添加一 个gituser组
chgrp -R gituser git_aml_mx_20140109/
chmod -R 'g+rwx' git_aml_mx_20140109/
chown -R build:gituser git_aml_mx_20140109/
git用户端root权限执行:
chown -R build01:gituser /home/build01/aml/mx/aml_mx_git_20140109/
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
/////////////////////git恢复本地被删除的文件
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
git checkout 文件名
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
/////////////////////msd6a801平台软件的git管理
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
[搜索并删除原有的.git、.svn]
su root
cd /backup/msd/6a801/git_msd_6a801
git init
chmod 777 -R .
//服务端建立源码快照
拷贝源码到当前目录
git add -f .
git commit -m ""
su build01
cd ~/msd/6a801
git clone build01@192.168.1.86:/backup/msd/6a801/git_msd_6a801/ git_msd_6a801
这里要求输入build01的密码
先建分支,在新分支下工作
git push build01@192.168.1.86:/backup/aml/mx/git_aml_mx_20131225/ HAMMX0S0
/////////////////////
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
/////////////////////git介绍
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Git比SVN好的地方在于两点:轻量级、分布式。
其中分布式的意思是Git不需要一个中心服务器,
任何一台使用git的电脑都可以当服务器,建立代码库服务器异常简单。
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
/////////////////////Ubuntu下apt-get安装
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
sudo apt-get install git-core
Windows下使用git,需要cygwin
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
/////////////////////应用场景
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1. 个人使用,不用建专门的代码服务器。
2. 多人维护代码,需要代码建服务器。
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
/////////////////////个人使用
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
假设代码放在/home/usr1/project目录下(非空),那么运行:
git init
git add -f .
git commit -m "init version"
git代码库就建立好了,目录下会多出个.git目录来
git init就是初始化,
git add是标记上要添加的文件,"."表示当前目录,此命令会递归标记所有子目录及文件。
git commit就是把标记上的文件和修改的文件commit到git库里,-m参数是添加对此次commit的注释,
git要求每次commit都必须有注释,如果没有-m参数,将会自动打开一个编辑器(通常是vi或nano)要求输入注释。
以后,如果修改了文件,则运行git commit -m "<comments>"就可以将修改反映到git库,将<comments>替换为你想要的注释。
如果添加了代码文件new_file,则在commit之前运行
git add new_file
如果想把代码克隆一份出来,进入你想克隆到的目录运行:
git clone /home/usr1/project new_project
注意git clone后有两个参数,
第一个参数是源代码目录,也就是含有.git文件夹的目录。
第二个参数是要克隆到的目录,如果省略,则会在当前目录下建立一个与源代码目录同名的目录,在本例中就是./project
克隆出的目录包含克隆前目录的所有代码修改信息,是完全独立的,
即之后在new_project下的所有修改与commit都不会影响原project。
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
/////////////////////多人维护代码
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
需要代码建服务器【这里是ubuntu代码服务器,windows的暂不介绍】
假设代码服务器的IP是10.0.0.2。
git默认用ssh作为网络通讯协议,所以在服务器10.0.0.2上安装ssh:
sudo apt-get install ssh
然后添加用户,比如usr2,home目录是/home/usr2。
以usr2用户登录10.0.0.2,建立一个/home/usr2/project目录来存放代码。
在/home/usr2/project目录下运行:
git --bare init
一条命令就把服务器就建好了。
--bare命令是告诉git当前目录不含代码,以后commit时只用保存修改就可以了。
在本机下载代码与 场景 1一样:【若代码服务器也是编译服务器,一机两用】
git clone /home/usr2/project new_project
如果要在另外的电脑下载代码,运行:
git clone usr2@10.0.0.2:project new_project
此命令会以ssh方式连接10.0.0.2,
如果第一次连接,会询问是否信任该服务器,输入yes后。
然后输入usr2(这里是说当前的,这个usr2只是巧合)用户的密码就可以了。
克隆地址usr2@10.0.0.2:project在home目录,
其实不需要,亲测user@192.168.0.136:/media/Disk1_150G/prj-test,
即使用“用户名@绝对路径”的方式也是可以的。
注意git clone后第一个参数的格式,为<用户名>@<服务器IP>:<相对路径>,
其中<相对路径>是指相对于<用户名>所在home目录的相对路径,
比如此例中,usr2的home目录是/home/usr2,那么此例的路径实际为/home/usr2/project。
<相对路径>不能留空或省略,
如果代码确实是在home目录下,则<相对路径>是".",不含双引号。
如果代码库是空的,会给出警告,不必理会。
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
/////////////////////提交代码到本地git库
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
如果在new_project里修改了代码,且添加了新代码new_file,想把这修改commit到服务器上,先运行:
git add new_file //这里也可以使用git add . 来完成,因为服务器上只会保存修改,所以全部上传也可以。
git commit -m "<comments>" //将<comments>替换为你的注释。这样代码就commit到【当前机器】的new_project了。
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
/////////////////////推到远端库
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
如果想commit到服务器上,则在new_project目录下运行:
git push usr2@10.0.0.2:project master
然后输入usr2用户的密码。
master是分支名
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
/////////////////////备注1
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
如果本机就是服务器,那么IP地址可以写为localhost或127.0.0.1。
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
/////////////////////备注2
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
如果觉得每次输入usr2@10.0.0.2:project很麻烦,
可以为这个URL取个别名my_server:
git remote add my_server usr2@10.0.0.2:project
这样前一条git push命令可以写作:
git push my_server master
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
/////////////////////git操作实例bykll
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
/////////////////////git仓库初始化
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
//以管理员账户build运行
sudo mkdir /backup/aml/m3/git_aml_m3/
sudo chmod 777 /backup/aml/m3/git_aml_m3/
cd /backup/aml/m3/git_aml_m3/
sudo git init
chmod 777 -R .
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
/////////////////////git仓库服务端建立源码快照
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
拷贝源码到当前目录(.git文件所在目录)
cp -rf XXX/release_src/* . //源码拷贝过来
find -name "*svn*" | xargs rm -rf //清除以前svn相关的版本管控信息
cd kernel && make clean && cd - && make clean
du -sh . //查看当前工程目录大小
git add -f . //这里用-f避免漏掉一些必要的文件
git commit -m "amlogic m3 [release_src] [svn => git] by kll 2014-2-27"
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
/////////////////////克隆git工程
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
//以普通用户账户build01运行
build01@build-pc:~/aml/m3$ git clone build01@192.168.1.86:/backup/aml/m3/git_aml_m3/ aml_m3_git //克隆到当前目录中的aml_m3_git目录,aml_m3_git目录不存在会自动创建
Initialized empty Git repository in /home/build01/aml/m3/aml_m3_git/.git/
The authenticity of host '192.168.1.86 (192.168.1.86)' can't be established.
RSA key fingerprint is ee:8b:b6:19:68:fa:fe:e2:21:68:a9:c8:e5:f2:07:05.
Are you sure you want to continue connecting (yes/no)? yes //信任该服务端,确认
Warning: Permanently added '192.168.1.86' (RSA) to the list of known hosts.
build01@192.168.1.86's password: //build01账户密码
warning: You appear to have cloned an empty repository.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
/////////////////////改远端权限
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
//避免远端无权限写入,以管理员账户build运行
build@build-pc:/backup/aml/m3/git_aml_m3$ sudo chmod 777 -R . //↓↓避免以下错误
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
/////////////////////远端无权限时提交错误提示
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Compressing objects: 100% (232816/232816), done.
fatal: Unable to create temporary file: Permission denied
error: pack-objects died of signal 13
error: pack-objects died with strange error
error: failed to push some refs to 'build01@192.168.1.86:/backup/aml/m3/git_aml_m3/'
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
/////////////////////再次提交本地代码到远端master分支
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
build01@build-pc:~/aml/m3/aml_m3_git$ git push build01@192.168.1.86:/backup/aml/m3/git_aml_m3/ master //提交当前分支到远端,并在远端创建master分支,因为第一次提到master分支
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
/////////////////////顺利提交本地代码到远端master分支的打印
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Compressing objects: 100% (232816/232816), done.
Writing objects: 100% (244224/244224), 1.86 GiB | 8.91 MiB/s, done.
Total 244224 (delta 61452), reused 0 (delta 0)
To build01@192.168.1.86:/backup/aml/m3/git_aml_m3/
* [new branch] master -> master
build01@build-pc:~/aml/m3/aml_m3_git$
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
/////////////////////常用分支操作命令
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
远端的分支创建:
由本地创建并推送,或直接在远端以创建本地分支的方式创建
git checkout 分支名 //切换分支
git branch //打印本地分支
git branch -r //打印远端分支
git branch 分支名 //创建指定分支
git branch -d 分支名 //删除指定分支
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
/////////////////////新账户build02从build01账户克隆代码
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
git clone build02@192.168.1.86:/home/build01/aml/m3/aml_m3_git/ aml_m3_git
//克隆完成后及时查看并切换分支
git branch
//看看远端有哪些分支
git branch -r
【拉】远端分支到本地
build02@build-pc:~/gitamlogic/mx/aml_mx_git$ git checkout -b HAMMX0S0 origin/HAMMX0S0
本地 远端
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
/////////////////////查看当前目录git差异
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
git diff .
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
/////////////////////账户1提交代码到本地库并推到远端
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
git status . //当前目录git查看状态,有何异动
git add 目录或文件 //提交新增或修改的文件,删除用rm
git commit -m "" //注释并提交到本地库
推到远端库
git push build01@192.168.1.86:/backup/aml/mx/git_aml_mx/ HAMMX0S0
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
/////////////////////账户2从远端拉更新状态到本地
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
build02@build-pc:~/gitamlogic/mx/aml_mx_git$ git fetch
remote: Counting objects: 35, done.
remote: Compressing objects: 100% (19/19), done.
remote: Total 20 (delta 13), reused 0 (delta 0)
Unpacking objects: 100% (20/20), done.
From /home/build02/gitamlogic/mx/../../../build01/aml/mx/aml_mx_git
* [new branch] HAMMX0S0 -> origin/HAMMX0S0
build02@build-pc:~/gitamlogic/mx/aml_mx_git$
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
/////////////////////版本回溯到某个<commit值>版本
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
git reset --hard 6c2b4e4be1579cf4f1a87123b4ea04325464bd1e
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
/////////////////////将远端的分支【更新】到本地当前分支
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
git fetch
git merge origin/HAMMX0S0
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
/////////////////////build02 clone的代码编译不通过,估计是build01提交的代码忽略了部分文件
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
在build01端执行:
git add -f . //强制全部提交上去
git commit -m "git add -f . //Allow adding otherwise ignored files." //提交到本地库
git push build01@192.168.1.86:/backup/aml/mx/git_aml_mx HAMMX0S0 //推到远端库
build02端再次更新即可
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
/////////////////////删除掉提交多了的文件
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
git rm 文件名
git commit -m "XXX"
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
/////////////////////显示指定版本的详细
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
git show <commit> //eg:git show 28ad252464dc80432379aba68da616566e105d21
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
/////////////////////本地创建新分支并推到远端
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
git branch
git branch HAMMX0S0
git checkout HAMMX0S0
git branch
git push build01@192.168.1.86:/backup/aml/mx/git_aml_mx_20140109/ HAMMX0S0
git branch -r
git branch
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
/////////////////////配置个人信息
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
git config --global user.email "build01@build-pc.(none)"
git config --global user.name "build01"
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
/////////////////////恢复指定文件到某历史版本
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
git log filename
git reset 9aa51d89799716aa68cff3f30c26f8815408e926 filename
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
/////////////////////恢复指定文件的最后一次修改
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
git checkout filename
恢复到最后一次提交的改动:git checkout -- + 需要恢复的文件名
但是,需要注意的是,如果该文件已经 add 到暂存队列中,上面的命令就不灵光喽
需要先让这个文件取消暂存:git reset HEAD -- + 需要取消暂存的文件名,然后再使用第一条命令。
如果感觉命令多了记不住,那就做一两个匿名呗,比如:
git config --global alias.unstage 'reset HEAD --'
git config --global alias.restore 'checkout --'
我们拿 README.md 这个文件举例,比如修改了一段文字描述,想恢复回原来的样子:
git restore README.md即可,
如果修改已经被 git add README.md 放入暂存队列,那就要
git unstage README.md
git restore README.md才能恢复成功。
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
/////////////////////多用户访问 git 库
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
服务端root执行:
groupadd gituser//添加一 个gituser组
chgrp -R gituser git_aml_mx_20140109/
chmod -R 'g+rwx' git_aml_mx_20140109/
chown -R build:gituser git_aml_mx_20140109/
git用户端root权限执行:
chown -R build01:gituser /home/build01/aml/mx/aml_mx_git_20140109/
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
/////////////////////git恢复本地被删除的文件
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
git checkout 文件名
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
/////////////////////msd6a801平台软件的git管理
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
[搜索并删除原有的.git、.svn]
su root
cd /backup/msd/6a801/git_msd_6a801
git init
chmod 777 -R .
//服务端建立源码快照
拷贝源码到当前目录
git add -f .
git commit -m ""
su build01
cd ~/msd/6a801
git clone build01@192.168.1.86:/backup/msd/6a801/git_msd_6a801/ git_msd_6a801
这里要求输入build01的密码
先建分支,在新分支下工作
git push build01@192.168.1.86:/backup/aml/mx/git_aml_mx_20131225/ HAMMX0S0