这条commit已经入库了,对于merge到主库的提交无法再进行修改,只能另做一个新的commit。
还有一种情况是,如果有远程库commit被舍弃,但是你本地里没有丢弃,而你基于本地的又做了一次新的提交,然后push出现错误
repo init git地址 -b 分支名 -m xml文件名
repo sync
如果要将本地代码回到某个历史版本直接checkout 或者 reset
checkout 支持将文件切换到历史版本,数据库不会修改,还可以回到你最新的状态
reset 是直接回退带指定版本,它有两种模式 一种是只将所有提交回退,修改还在,还有一种模式是完全回退,修改直接就没了。
repo forall -c git chekout 指定节点的哈希值
repo forall -c git reset 指定节点的哈希值
repo forall -c git reset 指定节点的哈希值 --hard (此 *** 作会回退掉指定节点之后的所有修改,如果回退出错 只能重新跟服务器同步了。)为有读写权限的用户建立一个分组。根据你的 *** 作系统,你可以用groupadd命令来实现,用vigr来编辑分组文件,或者直接编辑/etc/group文件。在最后,你会在/etc/group文件中看到如下一行
1
repogroup::10005:marry,john,violet
其中,repogroup是准许接入这个仓库的组的名字。10005是一个独一无二的分组识别数字,marry,john,violet则是获准接入这个仓库的用户。
决定Git仓库的路径。它既可以放在你的home路径下(eg /home/yourname/gitroot),也可以放在一个专用的路径下(eg /var/gitroot)
配置权限,让Git用户可以访问这个目录
1
2
chmod g+rx /path-to/gitroot
chown :grouprepo /path-to/gitroot
建立新的Git仓库,叫做newrepo
1
2
cd /path-to/gitroot
git init --bare newrepogit
建立路径认证,以允许用户组访问,同时有针对性的设置Git
1
2
3
4
5
cd newrepogit
chown -R :grouprepo
git config coresharedRepository group
find -type d -print0 | xargs -0 chmod 2770
find -type f -print0 | xargs -0 chmod g=u
设置提交(commit)的email通知(commit是一条命令),这样当有新的修改提交到仓库的时候,开发者们将会收到一封关于修改内容一览的电子邮件。
1
2
3
4
5
6
7
echo 'One-line project description' >description
git config --local hooksmailinglist email-a@examplecom<script cf-hash="f9e31" type="text/javascript">
/ <![CDATA[ /!function(){try{var t="currentScript"in documentdocumentcurrentScript:function(){for(var t=documentgetElementsByTagName("script"),e=tlength;e--;)if(t[e]getAttribute("cf-hash"))return t[e]}();if(t&&tpreviousSibling){var e,r,n,i,c=tpreviousSibling,a=cgetAttribute("data-cfemail");if(a){for(e="",r=parseInt(asubstr(0,2),16),n=2;alength-n;n+=2)i=parseInt(asubstr(n,2),16)^r,e+=StringfromCharCode(i);e=documentcreateTextNode(e),cparentNodereplaceChild(e,c)}}}catch(u){}}();/ ]]> /</script>,email-b@examplecom<script cf-hash="f9e31" type="text/javascript">
/ <![CDATA[ /!function(){try{var t="currentScript"in documentdocumentcurrentScript:function(){for(var t=documentgetElementsByTagName("script"),e=tlength;e--;)if(t[e]getAttribute("cf-hash"))return t[e]}();if(t&&tpreviousSibling){var e,r,n,i,c=tpreviousSibling,a=cgetAttribute("data-cfemail");if(a){for(e="",r=parseInt(asubstr(0,2),16),n=2;alength-n;n+=2)i=parseInt(asubstr(n,2),16)^r,e+=StringfromCharCode(i);e=documentcreateTextNode(e),cparentNodereplaceChild(e,c)}}}catch(u){}}();/ ]]> /</script>,
git config --local hooksemailprefix '[DI-PR] '
git config --local hooksshowrev "git show -C %s; echo"
git config --local hooksemailmaxlines 100
通过设置一个称为钩子(hook)的东东,来创建这些email通知。for example:
cd frameworks/base/
git status
git diff > testpatch
mv testpatch ~/
repo forall -c git reset --hard HEAD
repo forall -c git am --abort
repo forall -c git clean -xfd
repo sync
patch -p1 < ~/testpatch安装msysgit
安装步骤此处略去。
END
安装CopSSH
安装步骤此处略去。
END
修改配置
修改CopSSH配置文件C:\Program Files\ICW\etc\sshd_config,确保如下行为非注释行,且设置为“no”:
END
生成用户帐号
1
在服务器上生成Windows用户,取消用户下次登录时须更改密码,设置密码永不过期:
2
将该用户隶属于GitUser组(如尚未生成改组,则先生成改组):
END
激活用户
1
在Windows启动程序组中,运行如下程序(C:\Program Files\ICW\bin\ copsshcpexe):
2
进入COPSSH Control Panel应用对话框,正常情况下服务应该为正在运行(图标为绿色,如为红色,则可尝试点选该按钮,启动该服务):
3
选择Users页面:
4
点选Add按钮,出现如下导航对话框:
5
选择Forward按钮,出现如下页面,选择欲激活的用户对应的域名及用户名:
6
选择Forward按钮,进入如下页面,选择Linux shell and Sftp,所有选项选中:
7
选择Forward按钮,进入确认页面,选择Apply:
8
回到如下页面,选择Apply后,关闭。
END
公钥文件上传
1
从用户处取得对应帐户的公钥文件authorized_keys,复制到C:\Program Files\ICW\home\ricky\ssh目录下(\ricky\是对应的用户名);
2
Windows启动程序组中运行Start a Unix BASH Shell(或Windows运行中运行命令:"C:\Program Files\ICW\bin\bashexe" --login -i):
3
运行如下unix命令行,如运行未出错,则完毕。
END
生成Git库容器目录
在服务器硬盘上生成一个目录,用来容纳Git库,比如生成E:\ GITTestRepo\目录;
鼠标右键点击该目录,选择共享和安全…;
在d出的该目录属性对话框的安全页中加入用户对应的组GitUser;
确认该用户组权限设置了允许修改、读取和运行、列入文件夹目录、读取、写入,选择确定后完毕。
END
确认防火墙开放了22端口
确认服务器的防火墙没有禁止22端口的TCP/IP通信。
END
修改用户登录运行脚本
1
修改C:\Program Files\ICW\home\ricky\bashrc文件(\ricky\是对应的用户名),在文件最后加入如下行:当然可以 直接在服务器B上 git clone 加上 --bare 参数 不加 --bare 也行 但是从服务器上clone的时候会多一层 git目录 服务器B的repo可以设置个 post-receive 的 git hooks 让他收到提交后主动push代码到服务器A上去 1服务器B上获取服务器
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)