Create
cancel
Showing results for 
Search instead for 
Did you mean: 
Sign up Log in
  • Community
  • Products
  • Sourcetree
  • Questions
  • サブモジュール有→無となるようにリポジトリをチェックアウト/プルした場合にサブモジュールのファイルが残る

サブモジュール有→無となるようにリポジトリをチェックアウト/プルした場合にサブモジュールのファイルが残る

Ryoji Sobue August 28, 2019

Sourcetree でリポジトリをチェックアウトまたはプルして、サブモジュールの有無が有→無に変わる場合に、サブモジュールのファイルが残ってしまいます。

例:
repo_parent の配下にサブモジュール repo_sub が存在しています。

   repo_parent
.git
modules
repo_sub ... (A)
config ... (B)
.gitmodules ... (C)
       repo_sub ... (1)
.git ... (2)
directory ... (3)
file.txt
file_of_sub.txt ... (4)
file_of_parent.txt

チェックアウトして repo_sub が存在しないリビジョンにチェックアウトすると、以下の結果となります
(A)のディレクトリ:削除されない ×
(B)の当該管理情報:削除されない ×
(C)の当該管理情報:削除される 〇
(1)のディレクトリ:削除されない ×
(2)のファイル(管理情報):削除されない ×
(3)のディレクトリ及び配下のファイル:削除されない ×
(4)のファイル:削除されない ×

以下の質問にご回答頂けないでしょうか?

(1)以下の課題に該当するかと思いますが、本問題を修正する予定はないでしょうか?

https://jira.atlassian.com/browse/SRCTREEWIN-1330

(2)プル/チェックアウト時に正常に動作させるような手順、コマンドは存在しないでしょうか?

(3)(2)を実現するコマンドを実装できたとして、Sourcetree のカスタムコマンドで呼び出すことはできないでしょうか?
チェックアウト時は可能だと思いますが、プル時は難しいのではないかと考えています。

1 answer

0 votes
K_ Yamamoto
Atlassian Team
Atlassian Team members are employees working across the company in a wide variety of roles.
October 6, 2019

こんにちは、アトラシアンの山本です。

言及いただいた SRCTREEWIN-1330 はコメント内で git そのものの動作であるとの説明がなされているようです。恐縮ながら私の手元で同様の再現環境を用意できていないのですが SourceTree でなく git コマンドのみで submodule を管理した場合に同様の動作となるかご確認いただけますでしょうか。

Ryoji Sobue October 6, 2019

ご回答ありがとうございます。

Sourcetree がリポジトリへの操作を行う際は、実際には 1つ以上のコマンドに展開されている(git コマンドの呼び出し含む)ので、そのコマンドをそのままなぞると同じ結果となります。
サブモジュールの挙動は git コマンド自体でも少し怪しい(よく知ったうえで適切な操作を行う必要がある)ところもありますが、その怪しさを Sourcetree で吸収してくれるかどうかの製品上のポリシーにも関係していると思います。
git のコマンドは (A)の管理情報を概ね削除しないようです。

〇本投稿の場合(チェックアウト/プル時)

チェックアウトの場合は git chekuout と、サブモジュールがある場合は git submodule update --init --recursive が次に呼びだされることを確認しています。
git submodule deinitと(A)の削除 または git submodule sync を適宜行うとうまく動作させられる可能性があります。

〇以下の投稿の場合(サブモジュール削除時)

サブモジュールの削除でサブモジュールのディレクトリと管理情報の一部が残る 

サブモジュール削除時に以下のコマンドが呼び出されます

1. git submodule deinit -f
2. git rm --cached
3. git config -f .gitmodules --remove-section submodule.<submodule>
4. git add .gitmodules

こちらは 2 の --cached オプションは無くてもよいのではないかと思います。
また、別途(A)を削除する必要があります。

以上、よろしくお願いいたします。

Like K_ Yamamoto likes this

Suggest an answer

Log in or Sign up to answer
TAGS
AUG Leaders

Atlassian Community Events