質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
Git

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

GitHub

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

Q&A

解決済

2回答

4833閲覧

Gitでローカル専用の変更を保持する方法はある?

namenamenameko

総合スコア234

Git

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

GitHub

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

0グッド

1クリップ

投稿2018/03/01 01:05

編集2018/03/01 05:47

Git/Githubを使ってチームで開発しているときに、
例えばローカルでテストするときだけ設定ファイルやコードの中身を変更したいというようなことがたまにあります。

そのような場合は、Gitの管理対象ファイルである場合は一旦変更してテストが終わったらまた戻す、ということを繰り返すことになってしまいます。

それは面倒なので、ある変更をローカルの全てのブランチで保持する(かつコミットには反映させない)といったことをする方法はあるでしょうか?(もしくはいちいち変更する手間を減らす方法)

もちろんチームで開発環境を揃えるのが一番なのですが、外部のレポジトリとかだとなかなか難しいです。

[追記]
質問しておいてあれなのですが、
手軽にできる方法で私の目的に合っているものとして以下の方法を思いつきました。

  • ローカルのmasterブランチからmy_envブランチを生やす。
  • my_envブランチにて、開発用の変更をしてコミットする(コミットAとします)。
  • 開発ブランチは全てmy_envブランチから生やす。
  • リモートにpushする際に、 git rebase -i でコミットAのみを削除する。

あまり美しくない方法で、コンフリクトなど問題もあるかもしれませんが・・・。

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

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

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

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

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

guest

回答2

0

ベストアンサー

ローカルで行う変更だけ別ファイルに切り出せるのであれば、切り出した上でそのファイルを.gitignoreするのが手っ取り早いです。

ファイルの一部だけ変更する必要があるような場合には、assume-unchangedskip-worktreeのような手段があります(Qiita)。もちろん、設定中のファイルをリモートで更新すると不整合になりかねないので、要注意ではあります。

投稿2018/03/01 01:15

maisumakun

総合スコア145183

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

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

namenamenameko

2018/03/01 05:39

ありがとうございます!Gitは色々機能があり深いですね・・調べて見ます!
guest

0

私がよくやっている手は環境変数+外部ディレクトリから操作する方法です。
Dockerによる開発と相性が良いのでよく使っています。

AWSのAPIを利用するようなケースではキーがバレると困りますが、
外部のサービスを利用しない場合は公開しても特に問題無い情報しかないのでGitHubで管理しても構わないと思います。

環境構築用のプロジェクトを作成して流し込む方法を取っています。
簡単なディレクトリ構造と、docker-compose.ymlの中身を紹介します。
(他の依存するプロジェクトが無ければdocker-compose.ymlは基本的に1個で済むので放り込んでしまえば良いかと思います)

/home/user-name/projects/ 既存のプロジェクト/ src/ schema/ ddl.sql entrypoint.sh 操作用のプロジェクト/ docker-compose.yml

YAML

1version: '3' 2services: 3 mysql: 4 image: mysql 5 environment: 6 MYSQL_ROOT_USER: &mysql-user root 7 MYSQL_ROOT_PASSWORD: &mysql-pass password 8 MYSQL_DATABASE: &mysql-db test 9 volumes: 10 - ../main-project/schema/ddl.sql:/docker-entrypoint-initdb.d/0_ddl.sql 11 networks: 12 - develop_default 13 api: 14 image: node 15 environment: 16 VERBOSE: "true" 17 PORT: 80 18 MYSQL_USER: *mysql-user root 19 MYSQL_PASSWORD: *mysql-pass password 20 MYSQL_DATABASE: *mysql-db test 21 ports: 22 - "8080:80" 23 volumes: 24 - ../main-project:/opt/projects/main-project 25 command: node /opt/projects/main-project/entrypoint.sh 26 depends_on: 27 - mysql 28 networks: 29 - develop_default 30networks: 31 develop_default:

投稿2018/03/01 01:40

miyabi-sun

総合スコア21158

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

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

namenamenameko

2018/03/01 05:42

ありがとうございます!恥ずかしながらパッと理解できなかったのですが、 「ディレクトリ外にdockerの仮想環境を作り、その中でコードをいじる」というイメージでしょうか?? 勉強不足のため調べて見ます><
miyabi-sun

2018/03/01 06:07

> 設定ファイルやコードの中身を変更したい 「設定ファイルを作らない」という解決方法だと思ってください。 環境変数を使えば、プログラムの外から文字列が流し込めます。 Windows・Linux・Mac等のOSには「環境変数」という一人のユーザーがパソコンにログインした時に持ち続ける文字列という概念があります。 DockerやVagrantでテスト用のマシンを立ち上げた時に、 テストに応じた値に環境変数を設定してあげます。 PHP等のプログラム内で環境変数を元にif文で処理を割り振るなどの対応策が行えます http://php.net/manual/ja/function.getenv.php > コードの中身を変更したい デバッグする時にコード内にログを吐いたり、文字列を出力するのは仕方ないですが、 基本的にそういう事をするのは悪手なので減らす道を模索していきましょう。 Gitに流れたら最悪ですからね…従って質問文のコードを挿し込むというアプローチはよろしくありません。 処理を細かく分けてモジュール化し、 コマンド一つでそのモジュールをテストするプログラムを書いて何度も実行。 これがあるべき姿で、ユニットテストと呼ばれるジャンルになります。
namenamenameko

2018/03/02 06:36

なるほど!ありがとうございます!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問