2016-04-08 8 views
2

私は現在の作業コピーのすべてを取り消したいが、すべてのファイルを自動的にステージングする。とハンキーを編集する。Git:いくつかのファイルをステージングしないようにして、自動的にすべてをステージ

たとえば、私が取り組んでいるプロジェクトでは、他のほとんどの人とは異なるバージョンのCocoaPodを使用しています。私は自分のCocoaPodと互換性があるように設定ファイルの設定をアップグレードしたいと思います。これを行う最も簡単な方法は、プルリクエストに新しい設定を含めることですが、それはビルドできないことを意味します。私が設定を編集してから変更を適用した後に隠れていると、ポップすると設定が修正されますが、私の変更は元に戻されるので、隠れているとポップすることはできません。

これはどのように修正する必要がありますか?

+1

質問が不明です。リポジトリの一部であるファイルを変更したいが、 'git add'を実行したときにファイルをステージングさせないようにしますか? '.gitignore'ファイルを使用すると、あなたの問題に役立ちますか? – Enrico

+1

代わりに[スマッジ/クリーンフィルタ](https://git-scm.com/book/en/v2/Customizing-Git-Git-Attributes)を使用することを検討しましたか?こうすることで、チェックアウト時にカスタム設定を適用できるようになりますが、カスタマイズがコミットされないようにすることもできます。 – sschuberth

+0

@VonCはちょうど私が提案したものに基づいて答えを加えました:-) – sschuberth

答えて

2

1つの方法は、ローカルでのみ表示される方法でその設定ファイルを変更することです。
しかし、そのレポの他のユーザーにとっては見えないままです。

これらの変更はよく(すべてyour.config.fileで場所を越えていない)が定義されている場合は、あなたがチェックアウトでその設定ファイルのための適切なコンテンツを生成するためにcontent filter driverを検討することもできます

  • は汚れを追加.gitattributes declarationyour.config.fileファイルに関連付けられたスクリプト:

    your.config.file filter=filterconfig 
    

(編集またはを作成ファイルをあなたのローカルリポジトリのルートフォルダにコピーし、上の行を追加します。そのファイルを追加、コミット、プッシュすることができます。他のユーザーには影響しません)。

smudge
( "Pro Git book" から "Customizing Git - Git Attributes" からの画像、)

cd /path/to/your/local/cloned/repo 
git config filter.filterconfig.smudge 'update_config' 
git config filter.filterconfig.clean 'restore_config' 

update_configrestore_configスクリプトはどこにでも$PATH、ローカルに(彼らはあなたがオンになっている場合でも、bashであることができますWindowsはmingw git bashによって実行されるため)。

update_configスクリプトはなります

  • 、設定ファイルの最初のコピーを作成するには、設定ファイルにその変更を注入します。

このようにして、作業ツリーの更新をトリガーするgit pullは、必要なローカル変更を含む設定ファイルの内容を自動的に再生成します。それはgitので呼び出されるたび

そしてrestore_configスクリプトは、(それがgit statusまたはインスタンスのためgit diffによってトリガーされる)ファイルの保存されたコピーを復元します:

cat saved_copy 

そのように、設定ファイルをと表示され、gitに関する限り変更はありません。

+0

答えは非常に不明で、 'updateconfig'と' update_config'の両方を参照し、それらを設定する2つの異なる方法を参照します。ステップの指示(私は '.gitattributes'に精通していません)でより明確なステップを提供してください。 – Coder256

+0

@ Coder256混乱を避けるため、updateconfig属性の設定名を変更しました。 2つのフィルタードライバーを関連付けるために、構成ファイルに関連する構成名です.1つは変更内容を挿入し、もう1つは元の内容を復元するためのものです。 – VonC

+0

@ Coder256このフィルタを有効にするには、.gitattributes、*と* 2つの 'git config filter'コマンドが必要です.2つのbashスクリプトを書く必要があります.1つは元のコンテンツを' saved_copy 'ファイルを作成し、変更内容を追加します。変更内容は、その内容を復元します(1行:' cat saved_copy') – VonC

1

私が使ってきた戦略は、公開されているブランチとマシンを離れることのない2つのブランチの2つのブランチを使用することです。

開発を行うときは、プライベートブランチがチェックアウトされていますが、コミットしていません。あなたが変更に満足すれば、それらを隠し、公共支店をチェックアウトし、git stash popを実行し、結果をコミットします。その後、あなたのプライベートブランチに戻り、新しいコミットをマージします。

ご覧のとおり
* (public) commit 3 
* commit 2 
* commit 1 
* some base commit 

、何の公衆があなたに依存しないコミット:あなたはpublicブランチの歴史をグラフならば、あなたはこれを取得するには、今

* (HEAD->private) merge 
|\ 
| * (public) commit 3 
* | merge 
|\| 
| * commit 2 
* | a change in your local configuration 
* | merge 
|\| 
| * commit 1 
* | some private configuration changes 
\| 
    * some base commit 

:結果の歴史はこのようになります。設定のローカル変更を行い、設定変更の公開履歴を保持します。ただし、構成の変更は完全にバージョン管理されているため、マージコミットのいずれかに戻り、ビルドできることがわかります。

この価格は、もちろん、常に変化するブランチの手間です。だから私はできるだけそのような構造を避けるだろうが、状況によっては役に立つかもしれない。

関連する問題