LoginSignup
0
0

More than 1 year has passed since last update.

[Git]既存のディレクトリのGit管理をmaster以外のブランチで始める

Last updated at Posted at 2021-02-27

既存のディレクトリをmasterブランチ以外のブランチに反映する(同期する)手順(覚え書き)。
Gitのホスティングサービスは、GitLabを用いていますが、他を使用した場合も考え方は使えるかと。

やりたいこと

image.png

環境

  • OS: Amazon Linux2
  • Gitのホスティングサービス:GitLab

ディレクトリ構成

test
 |
 |----test.php
 |
 |----log →ログ出力用のディレクトリ:配下のファイルはGit管理対象外
 |      |----aaa.log
 |      |----bbb.log
 |      |----ccc.log
 |            :
 |            :
 | 
 |---dao                 
       |----testDao.php                   

testディレクトリのGit管理をmasterブランチではなく、developブランチで始めます。
また、logディレクトリ自体はGit管理の対象とするが、配下のログファイルは管理対象外とします。

手順

1. リモートリポジトリの作成

(1) まずGit管理を始めたいディレクトリと同名のプロジェクトを作成します。
GitLabにログインしたら、「New project」をクリックしましょう。
image.png

(2) 今回は、「Create blank project」(空のプロジェクト)にしました。
image.png

(3) 「Project name」にGit管理を始めたいディレクトリと同じ名前をつけ(①)、他は任意に入力し、「Create project」をクリック(②)。
image.png

(4) どうやら全く空だとブランチを作れない様子だったので、とりあえず.gitignore(Git管理の対象外とするファイルやディレクトリを記入する)を作っておくことに。
「New file」をクリック。
image.png
あるいは、プロジェクト説明の内容が決まっているなら、README(README.md)を追加してしまってもよいかもです。

(5) 遷移先の画面にて、「New file」をクリック。
image.png

(6) 「.gitignore」をクリック。
image.png

(7) .gitignoreが作成されたら、ひとまず空のままコミットしてしまいます。
「Commit」をクリック。
image.png

(8) 別の「Commit」ボタンが出現するので、こちらもクリック。
image.png

(9) プロジェクトアイコンをクリックして、プロジェクトTOPに戻ります。
image.png

(10) すると、新しいブランチが作成できるようになっています。
「+」をクリックして(①)出現したプルダウンから、「New branch」をクリック(②)。
image.png

(11) 「Branch name」に「develop」と入力して(①)、「Create branch」をクリック(②)。
image.png

2. ローカルリポジトリの作成

続いて、ローカル環境で作業を行います。

(1)Git管理を始めたいディレクトリのある階層まで移動したら、対象のディレクトリをひとまずリネームしましょう(理由はページ下部の補足事項に記載しています)。

$ mv test test.origin

(2) 作成したリモートリポジトリのTOP画面で、「clone」をクリックし(①)、「Clone with HTTPS」右横の「Copy」ボタンをクリック。
image.png

(3) 以下のコマンドを実行して、developブランチとしてcloneします。

$ git clone -b develop [(2)でコピーしたURL] ([ディレクトリ名])

もし、プロジェクト名と異なる名称で、クローンしたい場合は、「[(2)でコピーしたURL]」から半角スペースを空けて、つけたい名称を入力しましょう(「([ディレクトリ名])」の部分)。

(4) リネームしたディレクトリ配下をcloneしたリポジトリにコピーします。

$ cp -Rp test.origin/* test/

(5) その後、リポジトリ配下に移動し、以下のコマンドを実行して、

  • 成果物がコピーできていること
  • cloneできていること(.git, リモートリポジトリで作成した.gitignoreが存在するか)

を確認します。

$ tree -a

(6) 不要なファイルがあれば先に削除しておきましょう。
以下のコマンドを実行すれば、対象のディレクトリ配下がサブディレクトリ含め、フルパスで表示されるので、除外したいファイル(ディレクトリ)の先頭に「rm (-r )」をつけてあげればスムーズです。

$ ls -d $(find [ディレクトリへのパス])

(7) logディレクトリのみGit管理の対象とし、配下のファイルは対象外とする対処を施します。
まず、logディレクトリ配下で、.gitkeepを作成しましょう(隠しファイルであれば名前は問いません)。

$ cd log
$ touch .gitkeep

(8) 1階層上に戻って、.gitignoreに以下のように記述し、保存します。

.gitignore
log/*
!log/.gitkeep

これで、.gitkeepを除くlogディレクトリ配下のファイルが全てGit管理対象外となり、.gitkeepによってlogディレクトリはGit管理の対象とされます。
※「log/*」を「log/」とすると、ディレクトリごと無視され、「!log/.gitkeep」と書いても対象にならないので注意!

(9) 再度treeコマンドを実行して、ディレクトリの構造を確認しておくと安心です。

$ tree -a

(10) ステージングに追加し、コミット、プッシュします。
ここで、サーバ上のdevelopは本来デプロイ用のもののため(場合にもよると思いますが)、gitconfigにユーザー情報を保存せず、一時的な情報でコミットします。
コミットメッセージは任意で。

-- コミット対象をステージングについか
$ git add .
-- コミット対象を確認(手順9のtreeコマンドの実行結果と照合するとよい)
$ git status
-- コミット
$ git -c user.name='hoge' -c user.email='hoge@test.com' commit -m 'first commit'
-- リモートリポジトリに反映
$ git push

3. リモートリポジトリへの反映確認

ローカルリポジトリの内容がリモートリポジトリのdevelopブランチに反映されているか確認します。

(1) developブランチは以下の通り、ローカルリポジトリの反映されていました。
image.png

(2) masterブランチは元の通りで、ローカルリポジトリの内容は反映されていません。
image.png

うまくいきました!

補足事項

Git管理したいディレクトリをリネームしている理由は以下の通り。

1. リネームせず、同階層でcloneしようとした場合

$ sudo git clone -b [GitLabよりコピーしたURL]
fatal: destination path 'test' already exists and is not an empty directory.

2. リネームせず、ディレクトリ直下でcloneしようとした場合

$ sudo git clone -b [GitLabよりコピーしたURL] .
fatal: destination path '.' already exists and is not an empty directory.

どちらの場合でもエラーになってしまうんですね。。
そのため、既存のディレクトリを一度リネームして、リモートリポジトリをクローンしてから、中身をコピーするという流れに落ち着きました。

終わりに

既存のディレクトリをGit管理する場合、リモートリポジトリのmasterと同期したいところですが、開発環境を使ってスタートするケースなど、そうもいかない場合もあったりするもの。
手順に少し癖がありますが、実現できる方法を見つけられてよかったです。

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0