A. 如何删除服务器上的git project
服务器上的 Git
到目前为止,你应该已经学会了使用 Git 来完成日常工作。然而,如果想与他人合作,还需要一个远程的 Git 仓库。尽管技术上可以从个人的仓库里推送和拉取修改内容,但我们不鼓励这样做,因为一不留心就很容易弄混其他人的进度。另外,你也一定希望合作者们即使在 自己不开机的时候也能从仓库获取数据 — 拥有一个更稳定的公共仓库十分有用。因此,更好的合作方式是建立一个大家都可以访问的共享仓库,从那里推送和拉取数据。我们将把这个仓库称为 “Git 服务器”;代理一个 Git 仓库只需要花费很少的资源,几乎从不需要整个服务器来支持它的运行。
架设一台 Git 服务器并不难。第一步是选择与服务器通讯的协议。本章第一节将介绍可用的协议以及各自优缺点。下面一节将介绍一些针对各个协议典型的设置以及如何在服务器 上实施。最后,如果你不介意在他人服务器上保存你的代码,又想免去自己架设和维护服务器的麻烦,倒可以试试我们介绍的几个仓库托管服务。
如果你对架设自己的服务器没兴趣,可以跳到本章最后一节去看看如何申请一个代码托管服务的账户然后继续下一章,我们会在那里讨论分布式源码控制环境的林林总总。
远程仓库通常只是一个_裸仓库(bare repository)_ — 即一个没有当前工作目录的仓库。因为该仓库只是一个合作媒介,所以不需要从硬盘上取出最新版本的快照;仓库里存放的仅仅是 Git 的数据。简单地说,裸仓库就是你工作目录中.git 子目录内的内容。
4.1 协议
Git 可以使用四种主要的协议来传输数据:本地传输,SSH 协议,Git 协议和 HTTP 协议。下面分别介绍一下哪些情形应该使用(或避免使用)这些协议。
值得注意的是,除了 HTTP 协议外,其他所有协议都要求在服务器端安装并运行 Git。
本地协议
最基本的就是_本地协议(Local protocol)_,所谓的远程仓库在该协议中的表示,就是硬盘上的另一个目录。这常见于团队每一个成员都对一个共享的文件系统(例如 NFS)拥有访问权,或者比较少见的多人共用同一台电脑的情况。后面一种情况并不安全,因为所有代码仓库实例都储存在同一台电脑里,增加了灾难性数据损失 的可能性。
如果你使用一个共享的文件系统,就可以在一个本地文件系统中克隆仓库,推送和获取。克隆的时候只需要将远程仓库的路径作为 URL 使用,比如下面这样:
$ git clone /opt/git/project.git
或者这样:
$ git clone file:///opt/git/project.git
如果在 URL 开头明确使用 file:// ,那么 Git 会以一种略微不同的方式运行。如果你只给出路径,Git 会尝试使用硬链接或直接复制它所需要的文件。如果使用了file:// ,Git 会调用它平时通过网络来传输数据的工序,而这种方式的效率相对较低。使用 file:// 前缀的主要原因是当你需要一个不包含无关引用或对象的干净仓库副本的时候 — 一般指从其他版本控制系统导入的,或类似情形(参见第 9 章的维护任务)。我们这里仅仅使用普通路径,这样更快。
要添加一个本地仓库作为现有 Git 项目的远程仓库,可以这样做:
$ git remote add local_proj /opt/git/project.git
然后就可以像在网络上一样向这个远程仓库推送和获取数据了。
B. git如何撤销删除的远程分支
貌似没有撤销删除分支的操作,不过恢复的话可以
1)如果自己其他目录(或者其他同事那)还有一个没同步完服务器你删除分支操作的代码库:
$git checkout hotfixes //切到你的那个hotfixes分支
$git push origin HEAD:hotfixes-new
2)如果你记录有hotfixes分支上最后一次提交的commit-id(SHA值):
$git checkout -b hotfixes ./f8/
$git log
你的hotfixes分支上的提交又出来了 0 0!
$git push origin HEAD:hotfixes-new
如果你找不到那个commit-id,记得它的时间也可以,去.git/objects
$ll
2013-11-14 12:52 ba/
2013-11-14 12:51 e7/
2013-11-14 12:53 f2/
2013-11-14 12:52 f8/ 找下那个时间段的提交,然后
$find .
./f8/ 找到这个
查看是不是那个提交
$git show f8 //去掉.啊/啊什么的
N多个提交分不清的话,分别git show xxxxxx git show xxxxxx git show xxxxxx git show xxxxxx
只能GOOD LUCK FOR YOU!!!
C. git从服务器下载总是在地址后面多了一个斜杠
有一个项目一直是再我们localhost服务器A下使用的git做的开发。最近需要搬移到线上的服务器B上。
目的:要保留原有的所有的开发记录。
一开始,我准备是直接clone一份最新的,然后以这个为原始版本开创建,发现这个是不可取的。
最后想到的一个办法就是,登陆到A上面,切换到git用户组,使用scp将整个repositories下的项目目录到服务器B的git repositories下。那样就能保留原有的文件所有者规git所有。然后在服务器B上创建一个跟刚才过去的项目。就可以直接在本地使用B服务器上的git地址进行开发了。
如果您是使用的别人的git仓库,比如github。那就看看下面这篇我在网上找的文章:
如果你想从别的 Git 托管服务那里复制一份源代码到新的 Git 托管服务器上的话,可以通过以下步骤来操作。
1). 从原地址克隆一份裸版本库,比如原本托管于 GitCafe。
git clone –bare [email protected]:username/project.git
2). 然后到新的 Git 服务器上创建一个新项目,比如 GitHub。
3). 以镜像推送的方式上传代码到 GitHub 服务器上。
cd project.git
git push –mirror [email protected]:username/newproject.git
4). 删除本地代码
cd ..
rm -rf project.git
5). 到新服务器 GitCafe 上找到 Clone 地址,直接 Clone 到本地就可以了。
git clone [email protected]:username/newproject.git
这种方式可以保留原版本库中的所有内容。