2017-07-31 98 views
0

近3年来,我们一直在开发基于ssh://[email protected]:40000/myproject.git的git回购协议。现在我必须将文件传输到我的客户端git仓库,这是ssh://[email protected]:7999/w3/myproject.git在回购之间切换

然后开发人员需要开始工作转移回购这是bitbucket之一。

所以我有两个问题,什么是在回购之间转移代码的最佳方式?

那么开发人员开始处理新回购的最佳方式是什么?是否有可能只是改变远程网址?该项目是巨大的,我很乐意避免开发人员花一整天的时间来构建项目,配置等。

谢谢。

回答

1

是的,可以编辑远程URL。它取决于你的git-client,但是在一个没有GUI的git层上,只要看看.git/config文件,你会发现所有remotes的定义。

[core] 
    bare = false 
    (.....) 
[user] 
    name = you 
    email = [email protected] 
[remote "origin"]        #<---- here ya go '1 
    url = ssh://[email protected]:40000/myproject.git #<--- here ya go '2 
    fetch = +refs/heads/*:refs/remotes/origin/* 
[branch "master"] 
    remote = origin 
    merge = refs/heads/master 

所以,你可以改变它,拉链的.git,把它交给其他开发,他已经准备好去。呸。不要这样做,除非你在空白处。

这是因为没有太多的意义,所有手动。 Git可以轻松处理多个遥控器,并且您有push可以为您初始化新的远程回购,并且clone可以设置开发人员工作..可能对您(至少暂时)保持更便利两个遥控器均已配置。

假设你已经传统origin只需添加一个新的名称新一:

git remote add newrepo ssh://[email protected]:7999/w3/myproject.git 

后..只是推

git push newrepo master 

git push --all 
git push --tags 
... etc 

之后,新回购将包含来自源头的“一切”(=取决于你所推荐的内容)一个,新的开发者可以简单地从这个新的开发者clone/pull,忽略旧的。

由于您正在进行正常推送,新回购也将获得完整历史记录。如果你不想这样做,你需要先修剪它(压扁等)。

+0

如果我不能'git remote add newrepo',因为它已经存在并且有一些旧的代码在里面。 – DarthVader

+0

@DarthVader:你的新版本库包含一些旧的代码?有点奇特,不是吗?无论如何,假设你想删除旧的代码并用最新的代码替换它 - 首先清理新的repo:删除除master之外的所有分支(因为你可能无法删除'master' beucase,可能它是默认的分支在服务器的裸回购),然后强制推送一个孤立的空提交到'master'分支。之后,您的新回购将完全是空的,并准备好接收从您的实际源回购推送的内容。 – quetzalcoatl

0

由于通常git克隆整个存储库,除克隆之外,您不需要做太多的工作。
开发人员只需要改变他们'起源'的URL或者以不同的名字克隆新的URL,并且记住要推到那里。
就我个人而言,我会删除远程原点,然后添加远程原点。

+0

非常感谢。和什么将语法?我现在可以试试看。 – DarthVader

0

$ git remote add <new_origin_name> <new_origin_url>

是命令。在这里,new_origin_name可以是除了给旧的远程仓库以外的其他名称。然后强制推向新的回购:

$ git push --force <new_origin_name> 

如果--force太强,可以使用--force-with-lease。您的其他开发人员需要完全相同(除了使用--force选项当然!)。

对于Bitbucket(在Windows/Mac上),对于每个人来说,使用Atlassian软件sourcetree可能不是一个好主意,它可以帮助人们在GUI上完成所有这些工作。