web-dev-qa-db-ja.com

.gitignoreに追加した後にリモートリポジトリからディレクトリを削除する

私はコミットしてディレクトリをgithubにプッシュしました。その後、無視するべきディレクトリを追加して.gitignoreファイルを変更しました。すべてうまくいくが、(今は無視されている)ディレクトリはgithubのままである。

Githubとリポジトリの履歴からそのディレクトリを削除するにはどうすればいいですか?

501
janw

.gitignoreファイルの規則は、追跡されていないファイルにのみ適用されます。そのディレクトリの下のファイルはすでにあなたのリポジトリでコミットされているので、それらをアンステージし、コミットを作成し、そしてそれをGitHubにプッシュする必要があります。

git rm -r --cached some-directory
git commit -m 'Remove the now ignored directory "some-directory"'
git Push Origin master

リポジトリの履歴を書き換えることなしに履歴からファイルを削除することはできません。他の誰かがリポジトリを操作している場合、または複数のコンピュータからファイルを使用している場合は、これを実行しないでください。それでもやりたい場合は、git filter-branchを使用して履歴を書き換えることができます - ここに役立つガイドがあります

さらに、git rm -r --cached some-directoryからの出力は次のようになります。

rm 'some-directory/product/cache/1/small_image/130x130/small_image.jpg'
rm 'some-directory/product/cache/1/small_image/135x/small_image.jpg'
rm 'some-directory/.htaccess'
rm 'some-directory/logo.jpg'

rmはリポジトリに関するgitからのフィードバックです。ファイルはまだ作業ディレクトリにあります。

903
Mark Longair

私はこれをします:

git rm --cached `git ls-files -i --exclude-from=.gitignore` 
git commit -m 'Removed all files that are in the .gitignore' 
git Push Origin master

これはgitの無視しているすべてのファイル/フォルダを削除するので、手動で一つずつ選択する必要がありません。


これは私のために働かなくなったようです、私は今します:

 git rm -r --cached . 
 git add .
 git commit -m 'Removed all files that are in the .gitignore' 
 git Push Origin master
223
Blundell

ここに私の答えのように: どのようにGitリポジトリからディレクトリを削除するには?

Gitリポジトリからのみ、そしてローカルからではなくフォルダ/ディレクトリを削除するには、3つの簡単なステップを試してください。


ディレクトリを削除する手順

git rm -r --cached FolderName
git commit -m "Removed folder from repository"
git Push Origin master

次回のコミットでそのフォルダを無視する手順

次回のコミットでそのフォルダを無視するには、ルートに .gitignore という名前のファイルを1つ作成し、そのフォルダ名をそこに入れます。あなたは好きなだけ置くことができます

.gitignore fileはこのようになります。

/FolderName

remove directory

42
eirenaios

Blundellの最初の答えは私にはうまくいきませんでした。しかしそれは私に正しい道を示した。私はこれと同じことをしました:

> for i in `git ls-files -i --exclude-from=.gitignore`; do git rm --cached $i; done
> git commit -m 'Removed all files that are in the .gitignore'
> git Push Origin master

下記のステートメントを実行して、最初に削除するファイルを確認することをお勧めします。

git ls-files -i --exclude-from=.gitignore

私はVisual Studio用のデフォルトの.gitignoreファイルを使用していましたが、プロジェクト内のすべてのlogフォルダーとbinフォルダーが削除されていることに気付きましたが、これは意図した動作ではありません。

6

Blundellからの答えはうまくいくはずですが、いくつかの奇妙な理由でそれは私とはしませんでした。最初のコマンドで出力されたファイル名を最初にファイルにパイプし、次にそのファイルをループ処理してそのファイルを1つずつ削除する必要がありました。

git ls-files -i --exclude-from=.gitignore > to_remove.txt
while read line; do `git rm -r --cached "$line"`; done < to_remove.txt
rm to_remove.txt
git commit -m 'Removed all files that are in the .gitignore' 
git Push Origin master
4
Chris Aelbrecht

注:この解決法は GithubデスクトップGUI でのみ機能します。

Github Desktop GUI を使うことで、とても簡単です。

  1. フォルダを一時的に別の場所(プロジェクトフォルダ外)に移動します。

  2. .gitignoreファイルを編集して、githubページのマスターリポジトリを削除するフォルダエントリを削除します。

  3. プロジェクトフォルダを確定して同期します。

  4. フォルダをプロジェクトフォルダに移動します

  5. .gitignoreファイルを再編集してください。

それで全部です。

2
efkan

PowerShellを使用している場合は、次のコマンドを1つのコマンドとして試してください。

PS MyRepo> git filter-branch --force --index-filter
>> "git rm --cached --ignore-unmatch -r .\\\path\\\to\\\directory"
>> --Prune-empty --tag-name-filter cat -- --all

次に、git Push --force --allです。

ドキュメント: https://git-scm.com/docs/git-filter-branch

0
Shaun Luttin