GitHubリポジトリに2つのディレクトリがあります。そのうちの1つを削除したいのですが。リポジトリ全体を削除して再作成せずにそれを行うにはどうすればよいですか?
GitHubリポジトリに2つのディレクトリがあります。そのうちの1つを削除したいのですが。リポジトリ全体を削除して再作成せずにそれを行うにはどうすればよいですか?
回答:
両方のディレクトリで「マスター」をチェックアウトできます。
git rm -r one-of-the-directories // This deletes from filesystem
git commit . -m "Remove duplicated directory"
git push origin <your-git-branch> (typically 'master', but not always)
コメントで述べたように、通常は、このディレクトリをgitから削除しますが、ファイルシステム(ローカル)から完全に削除するのではありません。
その場合は以下を使用してください:
git rm -r --cached myFolder
git rm -r myFolder
たときはうまくいきましたが、「MyFolder」ディレクトリからすべてを削除しました。「MyFolder」ディレクトリのすべてを元に戻してからコミットする必要がありました。
git rm -r --cached myFolder
git rm -r --cached directory/
追跡されたgitからのみ削除されますが、リポジトリ構造は残ります。
ディレクトリを削除する手順
git rm -r --cached FolderName
git commit -m "Removed folder from repository"
git push origin master
次のコミットでそのフォルダーを無視する手順
次のコミットからそのフォルダーを無視するには、ルートに.gitignoreという名前のファイルを1つ作成し 、そのフォルダー名をその中に入れます。好きなだけ置くことができます
.gitignoreファイルは次のようになります
/FolderName
何らかの理由でkarmakazeの発言がうまくいかない場合は、使用するディレクトリを削除するか、ファイルシステムブラウザ(Windowsファイルエクスプローラなど)で削除してみてください。ディレクトリを削除した後、コマンドを発行:
git add -A
し、その後
git commit -m 'deleting directory'
、その後
git push origin master
。
あなたはこれを試すことができます:
git rm -rf <directory_name>
ディレクトリを強制的に削除します。
(git rm
他の回答で説明されているように)ディレクトリ内のファイルを削除すると、gitに関する限り、ディレクトリは存在しなくなります。空のディレクトリをコミットしたり、削除したりすることはできません。
これは、明示的にする必要があるsubversionとは異なりsvn rm emptyfolder/
、ちなみにman
git のページがそれ自体を「愚かなコンテンツトラッカー」と表現しているのはこのためです。
上の答えは「どのように私はgitのリポジトリに空のディレクトリを追加する」へのリンクこのテーマに関するよくある質問:
現在、gitインデックス(ステージング領域)の設計では、ファイルのリストのみを許可しており、空のディレクトリを許可するように変更を行うのに十分な能力を持つ人は、この状況を修正するのに十分注意していません。
ディレクトリは、その中にファイルを追加すると自動的に追加されます。つまり、ディレクトリをリポジトリに追加する必要はなく、単独で追跡されることもありません。
「
git add <dir>
」と言うと、そこにファイルが追加されます。チェックアウトに存在するディレクトリが本当に必要な場合は、その中にファイルを作成する必要があります。.gitignoreはこの目的に適しています。空のままにするか、ディレクトリに表示される予定のファイルの名前を入力できます。
以前にフォルダをコミットしたことがあり、履歴内のディレクトリも削除したい。
私は次のことをしました:
フォルダを追加.gitignore
:
echo Folder_Name/ >> .gitignore
すべてのコミットから削除:
git filter-branch --index-filter 'git rm -rf --cached --ignore-unmatch Folder_Name/' --prune-empty --tag-name-filter cat -- --all
古いコミットから参照を削除します。
git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d
すべての古い参照が完全に削除されていることを確認します
rm -Rf .git/logs .git/refs/original
ガベージコレクションを実行する
git gc --prune=all --aggressive
変更をオンラインリポジトリにプッシュします。
git push
これで完了です。
ただし、次のようにして、すべての変更をすべてのブランチにプッシュできます。ただし、このコマンドには注意してください。
git push origin --all --force
git push origin --tags --force
その後、フォルダーはgitから削除されましたが、ローカルディスクからは削除されませんでした。
Attlasianソースツリー(Windows)(https://www.atlassian.com/software/sourcetree/overview)を使用できます。ツリーからファイルを選択し、上部にある[削除]ボタンを押すだけです。ファイルはローカルリポジトリとローカルgitデータベースから削除されます。次にコミットしてからプッシュします。
私の同僚の1人が、強力だと思うBFG Repo-Cleanerを提案しました。不要なデータを削除するだけでなく、関連するコミット情報からリポジトリをクリーンアップします。
新しいディレクトリを追加するには:
mkdir <YOUR-DIRECTORY>
しかし、Gitはディレクトリではなくファイルを追跡しているため、Gitはこの新しいディレクトリを認識しません。
git status
Gitは加えた変更を認識しません。そのため.keep
、この新しい変更によってGitを認識させるために隠しファイルを追加します。
touch /YOUR-directory/.keep
これで、git status
Gitを押すと、変更が認識されます。
また、ディレクトリを削除する場合は、このコマンドを使用する必要があります。
rm -r <YOUR-DIRECTORY>
また、を使用してチェックした場合git status
は、ディレクトリが削除されていることがわかります。
2つの答えの組み合わせが私のために働いた
git rm -r one-of-the-directories
git commit . -m "Remove duplicated directory"
git push
それでも警告が表示される場合は、ファイルを手動で削除してください
git filter-branch --tree-filter 'rm -rf path/to/your/file' HEAD
git push