0

コードベースのリポジトリがあり、各プロジェクトはこのコードベースを継承しています。その上にサブモジュールがあり、すべて正常に動作します。

新しいプロジェクトを最初から開始するとき、このレポ (マスター ブランチのみ) と 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'

私は何が欠けていますか?

4

2 に答える 2

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と、過去へのドキュメンタリーのリンクさえも剥ぎ取られます。

于 2013-04-04T18:22:23.727 に答える
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
于 2013-04-04T18:11:23.280 に答える