Create
cancel
Showing results for 
Search instead for 
Did you mean: 
Sign up Log in
Celebration

Earn badges and make progress

You're on your way to the next level! Join the Kudos program to earn points and save your progress.

Deleted user Avatar
Deleted user

Level 1: Seed

25 / 150 points

Next: Root

Avatar

1 badge earned

Collect

Participate in fun challenges

Challenges come and go, but your rewards stay with you. Do more to earn more!

Challenges
Coins

Gift kudos to your peers

What goes around comes around! Share the love by gifting kudos to your peers.

Recognition
Ribbon

Rise up in the ranks

Keep earning points to reach the top of the leaderboard. It resets every quarter so you always have a chance!

Leaderboard

Come for the products,
stay for the community

The Atlassian Community can help you and your team get more value out of Atlassian products and practices.

Atlassian Community about banner
4,506,550
Community Members
 
Community Events
180
Community Groups
  • Community
  • Products
  • Sourcetree
  • Questions
  • サブモジュール有→無となるようにリポジトリをチェックアウト/プルした場合にサブモジュールのファイルが残る

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

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 Oct 06, 2019

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

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

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

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