如何从远程git服务器上拉取一个新建的git项目?
git clone +远程仓库地址
这里需要注意了,远程仓库会有两个地址,一个是使用SSH协议,一个是使用HTTP协议
如果你以后需要有push的权限,要使用SSH协议的那个仓库地址
如果你只是下下来研究代码,不需要上传本地的修改,可以使用HTTP协议的地址。
安装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库容器目录
1
在服务器硬盘上生成一个目录,用来容纳Git库,比如生成E:\ GITTestRepo\目录;
2
鼠标右键点击该目录,选择共享和安全…;
3
在弹出的该目录属性对话框的安全页中加入用户对应的组GitUser;
4
确认该用户组权限设置了允许修改、读取和运行、列入文件夹目录、读取、写入,选择确定后完毕。
END
确认防火墙开放了22端口
确认服务器的防火墙没有禁止22端口的TCP/IP通信。
END
修改用户登录运行脚本
1
修改C:\Program Files\ICW\home\ricky\bashrc文件(\ricky\是对应的用户名),在文件最后加入如下行:
理解 fetch 的关键, 是理解 FETCH_HEAD,FETCH_HEAD指的是: 某个branch在服务器上的最新状态’。这个列表保存在 Git/FETCH_HEAD 文件中, 其中每一行对应于远程服务器的一个分支。
当前分支指向的FETCH_HEAD, 就是这个文件第一行对应的那个分支
一般来说, 存在两种情况:
如果没有显式的指定远程分支, 则远程分支的master将作为默认的FETCH_HEAD
如果指定了远程分支, 就将这个远程分支作为FETCH_HEAD
git fetch origin branch1这个操作是git pull origin branch1的第一步, 而对应的pull操作,并不会在本地创建新的branch。设定当前分支的 FETCH_HEAD' 为远程服务器的branch1分支`。
这个命令可以用来测试远程主机的远程分支branch1是否存在, 如果存在, 返回0, 如果不存在, 返回128, 抛出一个异常
git fetch origin branch1:branch2首先执行上面的fetch操作,使用远程branch1分支在本地创建branch2(但不会切换到该分支),如果本地不存在branch2分支, 则会自动创建一个新的branch2分支,
如果本地存在branch2分支, 并且是`fast forward', 则自动合并两个分支, 否则, 会阻止以上操作
fetch更新本地仓库两种方式:
//方法一$ git fetch origin master //从远程的origin仓库的master分支下载代码到本地的origin master$ git log -p master origin/master//比较本地的仓库和远程参考的区别$ git merge origin/master//把远程下载下来的代码合并到本地仓库,远程的和本地的合并//方法二$ git fetch origin master:temp //从远程的origin仓库的master分支下载到本地并新建一个分支temp$ git diff temp//比较master分支和temp分支的不同$ git merge temp//合并temp分支到master分支$ git branch -d temp//删除temp1、git reset
没有push,这种情况发生在你的本地代码仓库,可能你add ,commit 以后发现代码有点问题
首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交commit_id(79f673d631b08907496ce792f429e1f00da25b73),上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。
HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard 79f673d631b08907496ce792f429e1f00da25b73。
穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。
要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。
2、git revert
已经push,对于已经把代码push到线上仓库,你回退本地代码其实也想同时回退线上代码,回滚到某个指定的版本,线上,线下代码保持一致你要用到下面的命令
git revert用一个新提交来消除一个历史提交所做的任何修改
revert 之后你的本地代码会回滚到指定的历史版本,这时你再 git push 既可以把线上的代码更新(这里不会像reset造成冲突的问题)
revert 使用,需要先找到你想回滚版本唯一的commit标识代码,可以用 git log 或者在adgit搭建的web环境历史提交记录里查看
git revert c011eb3c20ba6fb38cc94fe5a8dda366a3990c613、两者区别
git revert是用一次新的commit来回滚之前的commit,git reset是直接删除指定的commit看似达到的效果是一样的,其实完全不同
第一:上面我们说的如果你已经push到线上代码库, reset 删除指定commit以后,你git push可能导致一大堆冲突(或git push -f强制推送)但是revert 并不会
第二:如果在日后现有分支和历史分支需要合并的时候,reset 恢复部分的代码依然会出现在历史分支里但是revert 方向提交的commit 并不会出现在历史分支里
第三:reset 是在正常的commit历史中,删除了指定的commit,这时 HEAD 是向后移动了,而 revert 是在正常的commit历史中再commit一次,只不过是反向提交,他的 HEAD 是一直向前的
目前最火的版本控制软件就是Git了吧?你要是还用SVN或者CVS什么的都不好意思在圈里打招呼!前天我就遇到这种情况了,QQ上和老同学聊起自己用SVN来管理程序版本,好麻烦,当场就惨遭鄙视---“你还用SVN啊?你Out了!我们都用Git了!”好吧为了不被人鄙视,也为了可以鄙视别人,我终于也开始学Git了!
用了几天之后的感觉就是,确实好用啊!难道大家都来追捧!linus继linux之后又造福了人类一把!就是这个东西因为模式和之前的版本控制软件略有不同,所以入门上稍许有点难度,好吧不废话了,讲讲自己的心得体会吧!
首先不得不讲一下,需要分清git和github这是两个不同的东西,类似于linux和redhat,前者是开源的项目,后者则是利用这个开源的项目提供服务的服务商。github是一个使用git来托管代码的网站,有两种托管方式,一种是公开的,任何人都可以下载和上传代码,另一种是私人的只有建立者制定的人才可以下载或上传代码,私人的只有交钱才能用。
国内类似github的服务现在也冒出来不少,我用的是git@OSC ,这个的好处是无论哪种代码都是免费的,当然以后会怎样就不清楚了,目前使用中发现github的速度明显不如git@OSC ,看来前者还是不接地气啊。
因为这两个比较有代表性,后面我的使用基本就以这两个为例了。
操作系统自然是windows,用linux开发的都是大牛也用不着我来教,我的是win7,但winxp应该区别不大。
首先,你应该在你的电脑上安装msysgit和tortoisegit,前者是git的windows版,有了他就可以在你的电脑上创建工程,克隆工程什么的,后者则是大名鼎鼎的小乌龟,一个图形化的Git操作程序,用过tortoiseSVN的应该不会陌生,理论上只有前者也是完全可以使用git的,不过面对那赤裸裸的字符界面能受的了没几个吧。
这两个软件都很好安装就不多说了,假设你已经装完了,我的msysgit是184,tortoisegit是186,如果你们用的是其他版本的差别应该也不大。tortoisegit的早期版本应该在用户设置上略有不同。
第一部分 在本地使用git(类似SVN之中自己的电脑就是服务器)
首先,讲讲怎么在自己的电脑上创建和使用git库,没错,你可以将比较安全的磁盘当做之前SVN的服务器,把库(git叫repository)放在这里,然后把另一个磁盘当做工作区。
第一步,创建repository:
先进到那个你要当库的磁盘目录下,点鼠标右键,会出现这样一个东西:
其中关于git的有五项,前两项Git GUI Here和Git Bash Here不要理会,就是调用那两个程序而已。Git Clone和TortoiseGit我们后面再说,既然是创建repository那就选择Git Create repository here吧,这时又会出现这么个东西:
简单的说把Make it Bare勾上就表示这是一个单纯的repository,写代码的工作区放在另一个地方,我们既然是要创建一个库自然是要勾上了,然后点ok,会在目录下面出现很多稀奇古怪的文件和目录,不要在意,那都是git需要的东西。
这样一个库就完成了。
第二步,创建工作区:
我们转到要做工作区的那个磁盘的目录下,然后右键选择Git Clone,出现的是这样一个东西:
URL选择之前我们创建的库的目录,directory选择工作区,也就是你要放代码的目录。其他的不用管,ok之后会出现一个git目录,说明我们建立工作区成功了。
第三步 Add和Commit、push文件
我们在工作区的目录创建一个文件吧,比如testc
右键点击这个文件,选TortoiseGit:
Add就是把这个文件加入到TortoiseGit的关注列表之中,不进行这一步的话,这个文件哪怕你改出花来,小乌龟也是不会管的,而你Add之后,小乌龟就会随时关注这个文件是否修改。
在目录的空白处点击右键选择TortoiseGit,也可以批量Add文件,总之玩法很多大家可以自行研究。
选择Add之后会出现一个框,点击ok就可以,然后会出现这样一个框表示Add成功,先别急着点ok,我们还要commit呢:
同时testc的图标也变了,出来个加号,表示这个文件add成功了。
这里我们要花时间讲一下,git下文件的几种状态:
1就是没有Add的文件,这种文件在工作区的目录下就是普通的文件,小乌龟不关注他。
2就是Add成功的文件,用加号表示,但这个文件其实并没有保存到git的系统里,无论你怎样修改,也只是在工作区的目录下改变,git的系统里不会有这个文件的记录。
3是commit的文件,这个文件会保存在工作区下的git目录里(应该是吧)也就是你的本地的git系统里面,git会比较你commit前后是否修改,如果有修改会用红叉表示,否则就是一个绿色的对号。
4是push到repository之中的文件,repository可以是你本机建立的,也可以是类似github和git@OSC这样的服务器。
好吧我们现在只是add了,这肯定不行,必须要commit才算是利用了git啊,于是我们在刚刚那个对话框点击commit,这时候会要你输入一些提示,不写任何东西是无法选择ok的,好吧我们写上01表示这个版本,于是小乌龟允许你点ok了:
commit之后就是这样子了,这时候我们可以继续push也可以点ok关闭,以后再push:
commit成功之后文件是这个样子滴:
push的操作和commit很类似,因为我们这个repository是建立在本机的另一个磁盘下的,所以push的过程之中不需要输入密码什么的,直接搞定,没什么可讲的。
只需要注意commit的文件是保存在工作区的目录的,而push成功的文件是保存在repository里的。
第二部分 如何利用GitHub和Git@OSC
首先,需要你有GitHub和Git@OSC的账户。创建账户的过程不多说。
然后在自己的账户下创建Repository,过程当然也是在网页上点几下,填点文字就行了,至于license和readmemd之类的东西,默认放着就好。这个创建repository的过程其实就是之前我们右键选择create repository的过程,只不过之前我们是在本机上创建,而这里是在服务器上而已,本质没啥区别。
至于项目的类型,我们先讲public,之后有时间的话我再讲private(话说github的private是要收钱的,所以我也没试过)。
创建了之后那就是下载和上传自己的代码文件了。
这就和第一部分的过程很类似了,我们进到作为工作区的目录下面,右键选择git clone:
会出现这么个东西,和之前的很类似:
区别就是这里的url我们不能像第一部分那样填写本机的目录了,而是要填写github或者Git@OSC提供给你的url,github是在每个项目的右下角这里获取:
git@OSC则是项目主页的正中间:
复制,然后粘贴到小乌龟的那个文本框里就可以,然后ok,因为我们说的是public项目,所以没有密码之类的问题,很顺利的就会clone成功。
然后我们新建一个文件,add,commit的过程都和第一部分完全相同,注意commit之后的文件也依然保存在本地,接下来我们要做的就是把commit的文件push到服务器上,操作方式是在工作区的目录空白处点击右键-》tortoiseGit-》push:
因为是push到服务器上,所以会出现这样的对话框,填写自己的账户密码即可:
之后去github和git@osc上自己的项目主页上看看吧,你的文件已经push到服务器上了!
github和git@osc使用起来基本上很简单,网上有些文章写的是需要puttygen生成公钥私钥之类的,其实完全用不着,作为public项目简单的用户密码方式就可以了。那种方式以后我有时间再写个第三部分吧。
0条评论