2013-04-04 35 views
0

我有我的代码库回购,并且每个项目都继承这个代码库。 它有它的子模块,一切正常。只抓取一个分支的头,并推到Git的空回购

当我从头开始一个新项目时,应该如何克隆这个repo(只有主分支)并且只有HEAD(因为我不希望每个项目都有很多提交的基础)。

我想:

git init 
    git remote add -t origin URLtoProjectRepo 
    git remote add -t codebase URLtoMainCodeBase 
    git pull codebase master --depth=1 

当我试图推动这项目的回购协议,我得到:

[remote rejected] master -> master (missing necessary objects) 
    error: failed to push some refs to 'ProjectURL' 

什么我失踪?

回答

3

你不能把一个不完整的历史,但做一个没有历史的承诺很简单:

git fetch --depth=1 git://wherever master 
git checkout -B master $(git cat-file -p FETCH_HEAD|git commit-tree FETCH_HEAD^{tree}) 

会给你一个相当丑陋的提交信息包括原始历史链接文本;在那里大肆宣传|sed 1,/^$/d甚至可以将纪录片链接带到过去。

+0

它像一个魅力,它非常有帮助。非常感谢,@ jthill! – 2013-04-04 18:46:59

+2

:-)抽动很好,谢谢实际上提升了我的心情。回到atcha :-) – jthill 2013-04-04 18:49:31

+0

你能给我建议吗?我现在正在使用它,当我尝试将我的项目代码推送到它自己的回购站时,出现此错误: 错误:无法读取088acd304e40357f1a7a52d9deda2bd6b5d295de 致命:修订步行设置失败 – 2014-02-05 16:36:55

0

我有一个类似的问题要解决。我有一个基本存储库,它基本上是许多其他项目的核心代码。其他项目首先拉动核心存储库,然后检查到新的项目存储库。通过这样做,任何时候对核心回购进行更改,我们都可以轻松地将更改合并到我们的项目中。作为git的新手,这是我在研究这个过程中学到的结果。我从一个perl脚本中取出了这个脚本,用来自动化这个过程。这对我很有效。希望它可以帮助你。

git init 
git remote add origin new_repo 
git add . 
git commit -m 'initial commit' 
git push origin master 
git remote add base base_repo 
git checkout -b base 
git pull base master 
git checkout master 
git merge base 
git push origin master 
git branch -d base 
+0

你的答案有帮助,但你错过了,我只想要我的回购顶部。 – 2013-04-04 18:47:38

相关问题