🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Git

Gitはオープンソースの分散バージョン管理システム(DVCS)です。

GitHub

GitHubは、Gitバージョン管理システムを利用したソフトウェア開発向けの共有ウェブサービスです。GitHub商用プランおよびオープンソースプロジェクト向けの無料アカウントを提供しています。

バージョン管理

バージョン管理はコンピューター上にファイルとして格納されているドキュメント・プログラム・その他の情報の変更履歴等を管理するものです

Q&A

解決済

2回答

972閲覧

Git、GitHub、branchの仕組みが理解できない

tetatetu

総合スコア26

Git

Gitはオープンソースの分散バージョン管理システム(DVCS)です。

GitHub

GitHubは、Gitバージョン管理システムを利用したソフトウェア開発向けの共有ウェブサービスです。GitHub商用プランおよびオープンソースプロジェクト向けの無料アカウントを提供しています。

バージョン管理

バージョン管理はコンピューター上にファイルとして格納されているドキュメント・プログラム・その他の情報の変更履歴等を管理するものです

0グッド

1クリップ

投稿2021/03/09 05:37

編集2021/03/09 05:42

Git初心者です。もしかするとこの質問はGitについてきちんと一通り勉強していれば当たり前の話かもしれませんが、どうかお許しください。

いま、私のローカルリポジトリ内に2つのプログラムのファイルfoo_ver1.jsfoo.jsがあります、GitHub上にリモートリポジトリを作ってそこにpushして公開しています。

fig1

1myLocalRepository//ローカルリポジトリのフォルダ(リモートのmasterブランチへpush) 2├── .git 3| └──様々なgit関連のファイル群 4├── foo_ver1.js 5└── foo.js

実際に開発しているプログラムはfoo.jsで、これはずっと追加編集し続けたいのですが、キリの良い段階まで出来たものを「仮完成品」として保管・公開したいと思い、その時にfoo_ver1.jsというファイルをつくり、その時点でのfoo.jsの中身をコピペしました。今後もまたキリの良い仮完成品が出来次第、foo_ver2.js,foo_ver3.js..などのファイルを作成し、そこにfoo.jsの中身をコピペして保管、としていくことを考えています。

メインの質問

しかし、このやり方はバージョン管理ツールがなくても出来てしまい、Git & GitHubを有効利用できていないような気がします。普通はこんなことしなくても「ブランチ」というものを使えば、foo_ver1.jsとかfoo_ver2.jsとかいちいち名前をつけてファイルを残す必要がなく、foo.js単体だけあれば良いのかもしれません。(それすら良くわかりませんが…)
もし「ブランチ」というものが私の目的達成に適した道具であるなら、習得して使いこなせるようになりたいのですが、そういった用途に使われるものなのでしょうか?

ご回答よろしくお願いします。

蛇足質問その1 branchとgithubについて

  • branchは、編集履歴の分岐、ということですが、私のGitHubのmasterブランチのページに、上記fig1のローカルリポジトリのフォルダmyLocalRepositoryの中身のファイルfoo_ver1.jsfoo.js置いてあるのですが、これは「myLocalRepository内のfoo_ver1.jsfoo.jsは、masterブランチと結びついている」という理解で間違いないでしょうか?

  • 私のGitHubのページにはmasterのほかにもう一つmainというブランチがあって、そこにはRead meというテキストファイルがただ一つ置いてあるのですが、これはmainブランチはmasterブランチとは全く独立した別ディレクトリの履歴、ということでしょうか?また、「ブランチ」とは、「編集履歴のディレクトリ」のようなもの、という考えでよいでしょうか?

  • GitHubにpushするとローカルリポジトリと同じファイルがアップロードされているということは、このpushというコマンドは、「gitの履歴の追記」と「ローカルリポジトリファイルのアップロード」という2つのことを同時に行うコマンドなのでしょうか?

蛇足質問その2

今のところ、これをローカルリポジトリのフォルダmyLocalRepository内にそのまま置いています:

しかし、管理しやすいように、新しくver1フォルダとdevelopmentフォルダを作って、そこにfoo_ver1.jsfoo.jsを移動しました。

fig2

1myLocalRepository//ローカルリポジトリのフォルダ(masterへpush) 2├── .git 3| └──様々なgit関連のファイル群 4├── ver1 5| └── foo_ver1.js 6└── development 7 └── foo.js

後から気が付いたのですが、ディレクトリ構成が変わってしまったので、このままpushしてしまうと今までのfoo_ver1.jsfoo.jsのgitデータが破壊されてしまう気がしたので、再び上のディレクトリ構成に戻しました

ここで質問なのですが、こういうときはgit branchを使ってver1フォルダとdevelopmentフォルダを作ればよいのでしょうか?

ご回答よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

とりあえず質問者のやりたい事は、git initしたディレクトリ配下が仮完成品になった状態でコミットして

bash

1git checkout -b version1.0.0 2git push -u origin version1.0.0

です。
それだけやってgithub見れば何となく分かるでしょう。

ここで質問なのですが、こういうときはgit branchを使ってver1フォルダとdevelopmentフォルダを作ればよいのでしょうか?

branchの事をフォルダーと言っているのか文字通り新たにディレクトリ切る事をフォルダーと言っているのか分かりにくいですが、後者の意味なら違います。
バージョン管理目的でディレクトリーを作る事はしません

myLocalRepository内のfoo_ver1.jsとfoo.jsは、masterブランチと結びついている

特定のフォルダが特定のブランチに紐づいている訳じゃありません。紐づくのはリポジトリーです。

投稿2021/03/09 06:34

hentaiman

総合スコア6426

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tetatetu

2021/03/09 07:58

ご回答ありがとうございます。参考にさせていただきます。
guest

0

ベストアンサー

もし「ブランチ」というものが私の目的達成に適した道具であるなら、習得して使いこなせるようになりたいのですが、そういった用途に使われるものなのでしょうか?

はい。
どちらかというとブランチではなくタグを使うほうが目的に合っているとは思いますが、gitにおいてブランチとタグは仕組みがよく似ているものなのでブランチを理解した上であればタグの理解も容易です。

一応以下にもそれぞれ回答を書きましたが個別のケースで疑問を投げかけて何故そうなるか分からずに回答を受け入れるよりも、gitの仕組みを一通り学習したほうが楽だと思います。


私のGitHubのmasterブランチのページに、上記fig1のローカルリポジトリのフォルダmyLocalRepositoryの中身のファイルfoo_ver1.jsとfoo.js置いてあるのですが、これは「myLocalRepository内のfoo_ver1.jsとfoo.jsは、masterブランチと結びついている」という理解で間違いないでしょうか?

いいえ、そうではない場合もあります。
GitHubのmasterブランチのページに表示されているのは「リモートレポジトリ」の情報です。
自身のローカルディスク上に持っている「ローカルレポジトリ」の現在ブランチがmaster以外である可能性はおおいにあります。

私のGitHubのページにはmasterのほかにもう一つmainというブランチがあって、そこにはRead meというテキストファイルがただ一つ置いてあるのですが、これはmainブランチはmasterブランチとは全く独立した別ディレクトリの履歴、ということでしょうか?
また、「ブランチ」とは、「編集履歴のディレクトリ」のようなもの、という考えでよいでしょうか?

そのように理解できないこともないと思いますが、正しい仕組みを知ったほうがいいと思います。

GitHubにpushするとローカルリポジトリと同じファイルがアップロードされているということは、このpushというコマンドは、「gitの履歴の追記」と「ローカルリポジトリファイルのアップロード」という2つのことを同時に行うコマンドなのでしょうか?

うーん、まあそう言えなくもないでしょう。
pushはローカルレポジトリにあってリモートレポジトリに無いコミットをリモートに追加して、そのコミットを指すようリモートレポジトリのブランチを書き換えます。

foo_ver1.jsとfoo.jsのgitデータが破壊されてしまう気がしたので、再び上のディレクトリ構成に戻しました

破壊されません。gitでは基本的に過去のデータが破壊されることはありませんし、名称変更や移動したファイルはファイル内容を元に自動的に追跡してくれます。

投稿2021/03/09 07:03

ku__ra__ge

総合スコア4524

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tetatetu

2021/03/09 07:59

ご回答ありがとうございます。一度じっくり学習しなければ理解は難しいと感じたので、そうしようと思います。 とりあえず、ローカルリポジトリのみでgit操作を覚えてみることにします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問