2012-04-10 14 views
4

私はgithubを使ってローカルマシンに最新バージョンのコピーを作成しています。プッシュリクエストをしたくありません。プルリクエストを行い、ローカルマシンのいくつかのファイルを修正してみたいいくつかのファイルを無視して他のファイルを更新するようgithubに伝えてください。githubと同期されたローカルリポジトリにいくつかのファイルを無視する方法はありますか?

私は「config.inc.phpを」という名前のファイルを無視するには、次のコマンドを使用し

:それから私は、リモートのGitHubリポジトリ内の他のファイルを変更したと私は新しい変更を取得しようとすると、

git rm /home/escogit/www/inc/config.inc.php 

 
remote: Counting objects: 9, done. 
remote: Compressing objects: 100% (1/1), done. 
remote: Total 5 (delta 4), reused 5 (delta 4) 
Unpacking objects: 100% (5/5), done. 
From github.com:Visooal/Colegios 
    e724ba3..a624059 master  -> origin/master 
Updating e724ba3..a624059 
error: Your local changes to the following files would be overwritten by merge: 
www/inc/config.inc.php 
Please, commit your changes or stash them before you can merge. 
Aborting 

注:コマンドを使用して、私は次のエラーを取得する「gitのはプル」私は-mコミットコマンドはgitにコミットしても「無視.config.inc.php」私はそのエラーを取得

答えて

1

最初、 git rmはファイルを無視しません。ファイルをローカルおよびインデックスから削除します。ファイルを削除する前にコミットした場合、ファイルが現在のインデックスに存在しない場合でも、ファイルは常にツリーに表示されます。他の人が偶然に簡単に再追加することができます。 git rmの後にそのファイルの.gitignoreエントリを設定する必要があります。人々は手動で.gitignoreを手動でバイパスすることはできますが、ファイルはgit statusやその他のUIツールには表示されません。

あなたは言うことをする必要があります。 git commit -a -m "My Commit Comment"を実行する前にgit pull

もっと鮮明な画像を表示するには、すでにファイルがgit rmであることを前提として、これらのコマンドを実行してください。

echo 'config.inc.php' > .gitignore 
git add .gitignore 
git commit -a -m "Removed uneeded file" 
git pull 
// Fix any merge issues 
git commit -a -m "Merge" 
git push 
+1

最も深刻なファイルを削除して 'Git stop it it'を作成してください。 'git rm --cached'はそれを索引から削除しますが、Gitはソース内に存在し、 'git status'などで表示されるため、まだ '追跡中'です。 – GoZoner

+1

@GoZonerあなたのコメントの点については混乱していたので、混乱していたので私の前のコメントを削除しました。あなたが正しいのですが、ファイルをローカルシステムに保存したいのにgitインデックスから削除するには 'git rm --cached'を使うべきです。 –

0

Gitではコミットされていない変更を取り込めません。 gitが通常はファイルを無視するようにするには、.gitignoreというファイルを作成しますが、これは変更になるためここにはありません。ファイル名はrepo/.git/info/excludeに追加できます。このファイルは.gitignoreと同じ構文を使用しますが、コミットされていないか、gitインデックスには見えません。だからあなたの例では、escogit/.git/info/excludeにライン

www/inc/config.inc.php 

を追加します。

リモートでこれらの無視されたファイルのいずれかを変更してからその変更を引き出すと、まだ問題が発生することがあります。したがって、ローカルの変更をコミットするのが最善の方法です。彼らはとにかくプッシュされないので、それは問題ではありません。これを実行するには

git commit -a -m "a message explaining commit" 

次に、gitが自動的に変更をマージします。ローカルをクリーンな状態に戻す必要がある場合は、git checkout .

+0

彼はなぜ変革を起こすのが悪いのだろうか?彼は、自分が望むものを作成、追加、変更することができます。 Gitは追跡されていないファイルを追跡されたファイルで修正することを妨げているだけです。プルの前に彼がコミットしている限り、彼は大丈夫です。 –

+0

idはファイルを編集し、git commit -a -m "sample"は次のメッセージを出力します。アンパックオブジェクト:100%(5/5)、完了。 github.com:Visooal/Colegios a624059..db091a4マスターから - >起源/マスター 更新 早送り WWW/INC/config.inc.phpをa624059..db091a4 | 2 + - 1ファイルの変更、1挿入(+)、1削除( - )。だからファイルを同期化しました – gustavomanolo

+0

私が参照する問題は、gitの不平を避けるためにローカルの無視メソッドを使用する場合です。変更をコミットしてから引っ張ることは正しい方法です(そして決して押すことはありません)。今gustavomanoloあなたの満足に働いていますか? –

0

を無視して、.gitignoreの変更を無視することができます。

だから、これは次のようになります。 にファイルを追加します。gitignore

echo '/home/escogit/www/inc/config.inc.php' >> .gitignore

その後、gitignoreの変化を無視:

git update-index --assume-unchanged .gitignore

そして、それに行うのを!

警告:.gitignoreですべてのローカル変更は、この操作を元に戻す、および望ましい特徴で再びそれを再取り消すために省略することがしようとしている使用します。 "gitのRMはちょうどより多くの処理を行いgit update-index --no-assume-unchanged .gitignore