2017-08-30 4 views
0

私は1つのサブモジュールを持つスーパープロジェクトを持っています。そのサブモジュールは、スーパープロジェクトから完全に独立して開発されていますが、それは私のスーパープロジェクトのセットアップ方法ではありません。現在、サブモジュールの起点が更新されると、誰か(私)がgit submodule update --recursive --remoteを実行してからそのスーパープロジェクトにコミットすると、スーパープロジェクトだけが更新されます。それは愚かです。私は私のスーパープロジェクトのサブモジュールのバージョンを追跡したり、ハッシュをコミットしたりしません。私が望むのは、起源/マスターが何であれ、私のスーパープロジェクトでサブモジュールの起源/マスターを持つことだけです。私はサブモジュールを同期させ、サブモジュールを私のスーパープロジェクトにコミットしないでください。例えばgit submodule:サブプロジェクトをスーパープロジェクトにコミットせずに最新の状態に保つにはどうすればいいですか?

は、git cloneを行った後、サブモジュールを得るために、私はgit submodule update --init --recursiveを実行し、この取得:

$ git submodule update --init --recursive 
Submodule 'scripts/token' (https://gitserver.company.com/token.git) registered for path 'scripts/token' 
Submodule path 'scripts/token': checked out '93b6bee2031913f563f548883358a65a136bdd88' 

しかし、コミットハッシュ93b6bee2031913f563f548883358a65a136bdd88がトークンレポの起源/マスターではありませんが、それは0f39201818985d21a1f2362ad5b519793bd4f2b6です。それを得るために、私は別のgit submoduleのコマンドを実行しています

$ git submodule update --recursive --remote 
Cloning into '/Users/me/superproject/scripts/token'... 
Submodule path 'scripts/token': checked out '0f39201818985d21a1f2362ad5b519793bd4f2b6' 
$ git status 
On branch master 
Your branch is up-to-date with 'origin/master'. 

Changes not staged for commit: 
(use "git add <file>..." to update what will be committed) 
(use "git checkout -- <file>..." to discard changes in working directory) 

    modified: scripts/token (new commits) 

いいえ、私は親プロジェクトに「新しいコミットを」持っていないが、私はちょうどサブモジュールを同期しました。私はこれが依存関係のように動作するようにしたい。私はtoken>=0.0.1(何が起源/マスターでも)を望んでいますが、私が持っているものはtoken=explicit_commit_hashのようです。バージョン番号をサポートしたり、スーパープロジェクトのサブモジュールトークンのハッシュをコミットする必要はありません。

UPDATE:git statusは「最新」git submodule updateを実行する前に、ローカルの変更と、その後、git submodule update後にサブモジュールを更新言えばつまりが、私はまだgit statusが「最新」と言いたいですローカル変更はありません。

私は間違っていますか?

答えて

0

私が考えることができる最も近い近似は、クローン、サブモジュール更新リモートクローン(サークローンまたはそれを呼びたいもの)のエイリアスを使用することです。 .gitconfigファイルに次を追加します。シェルが引数を解析しようとするため、git config --global alias.surclone経由で追加することはできません。

surclone = "!f() { git clone --recursive ${1} . && git submodule update --remote --recursive --init; }; f" 

あなたは、自動的に(git commit --amend -a -m "Current master version of all submodules")をコミットするコマンドを拡張して、サーバー(git push -f)にそれをプッシュする強制することができます。これは、すべてのサブモジュールを追加するとき、あなたはまた、それが追跡し、以降これを追加し、例えば、.gitmodules

[submodule "SubmoduleA"] 
    path = SubmoduleA 
    url = [email protected]:some/repo.git 
    branch = master 
+0

は何を私が探していることは、 'Gitのcommit'まですべてですしている枝を指定する必要があります。サブモジュールの更新を修正されたコードと見なしてもらいたいとは思わない。 'git status'が"最新 "と表示されている場合、' git submodule update'がサブモジュールを更新した後、 'git status'がローカルに変更されずに"最新 "と言いたいとします。 – DrStrangepork

関連する問題