web-dev-qa-db-ja.com

Gitブランチ名-大文字と小文字を区別するか、区別しないか?

私は新しいgitユーザーであり、最近世話をするために時代遅れのgitリポジトリを手渡されました。

これは元の状態です(git show-branchによる出力):

! [cr232] CR 232 Release
        * [dev] Style Changes
---------------
        *   [dev] Style Changes
        *   [dev^] SMS 5.4
        *   [dev~2] Logo Change
        *   [dev~3] SMS 5.3
        *   [dev~4] SMS 5.2
        *   [dev~5] SIT R-0.3.3 EDW SMS Layers
        *   [dev~6] SIT Release R 0.3.0
       +*   [cr232] CR 232 Release
       +*   [cr232^] Dashboard Fix
       +*   [cr232~2] Release for system testing

この時点で「dev」と呼ばれるブランチがあることに注意してください。強調表示されているのは、devへの参照(dev、dev ^、dev〜2など)であることに注意してください。

開発の目的で、すべてが首都である「DEV」というブランチを考えていました。

そこで、新しいブランチ(git branch DEV)を作成して、git show-branch –date-orderを実行します。

! [DEV] Style Changes
    ! [cr232] CR 232 Release
        * [dev] Style Changes
---------------
        *   [DEV] Style Changes
        *   [DEV^] SMS 5.4
        *   [DEV~2] Logo Change
        *   [DEV~3] SMS 5.3
        *   [DEV~4] SMS 5.2
        *   [DEV~5] SIT R-0.3.3 EDW SMS Layers
        *   [DEV~6] SIT Release R 0.3.0
       +*   [cr232] CR 232 Release
       +*   [cr232^] Dashboard Fix
       +*   [cr232~2] Release for system testing

DevとDEVの両方がブランチとしてリストされていることに注意してください。また、5行目ではdevへの参照がDEVに変更されています(つまり、DEV、DEV ^、DEV〜2など)。

5行目の出力とは何ですか?その隣の説明が「dev」ブランチ中の古い作業の説明を参照しているため、「DEV」に変更されるのではなく「dev」のままになると思います。

DEVブランチ名をDVに変更して(git branch –m DEV DVを実行)、次のようにブランチを表示することで、元の状態に戻ろうとしています。

! [DV] Style Changes
    ! [cr232] CR 232 Release
        * [dev] Style Changes
---------------
        *   [DV] Style Changes
        *   [DV^] SMS 5.4
        *   [DV~2] Logo Change
        *   [DV~3] SMS 5.3
        *   [DV~4] SMS 5.2
        *   [DV~5] SIT R-0.3.3 EDW SMS Layers
        *   [DV~6] SIT Release R 0.3.0
       +*   [cr232] CR 232 Release
       +*   [cr232^] Dashboard Fix
       +*   [cr232~2] Release for system testing

ブランチには現在DVとdevが含まれていることに注意してください。また、devへの5行目の参照がDVに変更されました(つまり、DV、DV ^、DV〜2など)。

DV参照に関して、元の状態の状態に戻す方法はありますか? gitは混乱し、歴史的な情報の名前を、大文字でのみ異なるブランチに変更しましたか?

これを修正する方法を支援してください。ありがとうヒープ

17
jak

だから私は先に進み、新しいブランチを作成しました(git branch DEV)

ブランチDEVにいるときに、新しいブランチdevを作成しました。したがって、DEVdevは、同じコミットを指す2つのブランチです。 DEVの名前をDVに変更すると、DVdevは同じコミットを指す2つのブランチになります。

すべて順調です。 DVに煩わされたくない場合は、単にgit branch -d DV削除します。本当に新しいブランチを作りたいなら、あなたと他の人を混乱させない命名規則に従うほうが良いでしょう。

使用したことがないgit show-branchgit log --oneline --all --graph --decorate=fullは、明確なロググラフを描画します。

10
ElpieKay

git show-branchElpieKayなど については何も言及せずに、件名の質問に答えるだけで、実際にgit show-branchを使用することはありません。

Gitブランチ名—タグ名、およびGitが呼び出す他のすべてのreference名は、元々intended大文字と小文字を区別します。

これはすべて、Gitのコードで大文字と小文字が区別されるLinux/Unixマシンで完全に機能します。 Gitがファイルシステムにブランチ名をファイル名として保存する場合(sometimes)、ファイルシステムでも大文字と小文字が区別されます。1

Itsometimesは、Windowsおよび一部のMacOSシステムで失敗します。具体的には、Gitが参照名を参照名から派生した個々のファイルに参照を保存し、それらのファイル名が大文字と小文字を区別しない場合(たとえば、大文字と小文字を区別します-のみ、本当に古いFAT 8.3形式と同様ですが、これを行う最新のファイルシステムがないことを願っています)。

上記のように、Gitは常に参照名をファイル名として保存するとは限りません。実際、最初のクローンでは、すべての名前は.git/packed-refsと呼ばれる単一のファイルにあります。2 そのため、この時点で大文字と小文字を区別します。しかし、時間の経過とともに「開梱」され、3 そして、一部のシステムではケースフォールディングになります。

一部のシステムでは失敗する場合があるため、一般的には大文字と小文字が異なるだけの複数の参照名を使用しないことをお勧めします。


1もちろん、最新のUnix/Linuxシステムでは、大文字と小文字を区別せずに大文字と小文字を区別しないファイルシステムにアクセスできるようになり、一部のファイルシステムでは大文字と小文字を区別しないようにWindowsとMacOSに指示できるようになりました。 (ただし、デフォルトから変更する場合は、ボックス用のソフトウェアが失敗することを期待してください。Photoshopのようなものは、fooおよびFOOという名前のファイルを内部的に使用しようとします。同じファイルを参照してください!)

2このパックされた参照ファイルはかなり前から存在していましたが、永遠ではなく、Gitの非常に初期のバージョンでは使用されない場合があります。内部的には、Gitは新しい「プラグ可能な参照名インターフェイス」を取得しており、Gitの将来のバージョンでは、このファイルも個々の参照ごとのファイルも使用しない可能性があります。

3一般に、参照を作成または更新すると、解凍された参照ファイルが存在します。 git pack-refs --allを実行すると、パックされていない参照がパックされた参照に置き換えられ、大文字と小文字の区別が完全に復元されます。 --allがなければ、git pack-refsは、既にパックされた参照のみをパックします。これは主に役に立たない操作モードです(使用されなくなったケースを対象としています)。

38
torek