Tôi có 2 thư mục trên kho GitHub của mình. Tôi muốn xóa một trong số họ. Làm thế nào tôi có thể làm điều đó mà không xóa và tạo lại toàn bộ kho lưu trữ?
Tôi có 2 thư mục trên kho GitHub của mình. Tôi muốn xóa một trong số họ. Làm thế nào tôi có thể làm điều đó mà không xóa và tạo lại toàn bộ kho lưu trữ?
Câu trả lời:
Bạn có thể kiểm tra 'master' với cả hai thư mục;
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)
Như đã đề cập trong các bình luận, những gì bạn thường muốn làm là xóa thư mục này khỏi git nhưng không xóa nó hoàn toàn khỏi hệ thống tập tin (cục bộ)
Trong trường hợp đó sử dụng:
git rm -r --cached myFolder
git rm -r myFolder
nó hoạt động, nhưng cũng xóa mọi thứ khỏi thư mục "MyFolder". Phải hoàn nguyên mọi thứ trong thư mục "MyFolder" và sau đó cam kết.
git rm -r --cached myFolder
git rm -r --cached directory/
chỉ xóa khỏi git theo dõi, nhưng cấu trúc kho lưu trữ vẫn còn.
Các bước để loại bỏ thư mục
git rm -r --cached FolderName
git commit -m "Removed folder from repository"
git push origin master
Các bước để bỏ qua thư mục đó trong các lần xác nhận tiếp theo
Để bỏ qua thư mục đó từ các lần xác nhận tiếp theo, hãy tạo một tệp trong thư mục gốc có tên .gitignore và đặt tên thư mục đó vào đó. Bạn có thể đặt bao nhiêu tùy thích
tập tin .gitignore sẽ trông như thế này
/FolderName
Nếu, vì một số lý do, những gì karmakaze nói không hoạt động, bạn có thể thử xóa thư mục bạn muốn sử dụng hoặc với trình duyệt hệ thống tệp của bạn (ví dụ: trong Windows File Explorer). Sau khi xóa thư mục, ban hành lệnh:
git add -A
và sau
git commit -m 'deleting directory'
đó
git push origin master
.
Bạn có thể thử điều này:
git rm -rf <directory_name>
Nó sẽ buộc xóa thư mục.
Nếu bạn loại bỏ các tệp trong thư mục ( git rm
như các câu trả lời khác giải thích), thì thư mục đó không còn tồn tại khi có liên quan đến git. Bạn không thể cam kết một thư mục trống, bạn cũng không thể xóa một thư mục.
Điều này không giống như lật đổ mà bạn phải nói rõ ràng svn rm emptyfolder/
và tình cờ tại sao man
trang git mô tả chính nó là "trình theo dõi nội dung ngu ngốc"
Câu trả lời về "Làm cách nào để thêm thư mục trống vào kho git" liên kết đến Câu hỏi thường gặp về chủ đề này :
Hiện tại, việc thiết kế chỉ số git (khu vực tổ chức) chỉ cho phép các tệp được liệt kê và không ai đủ thẩm quyền để thực hiện thay đổi để cho phép các thư mục trống đã quan tâm đủ về tình huống này để khắc phục.
Thư mục được thêm tự động khi thêm tệp bên trong chúng. Đó là, các thư mục không bao giờ phải được thêm vào kho lưu trữ và không được theo dõi riêng.
Bạn có thể nói "
git add <dir>
" và nó sẽ thêm các tập tin vào đó.Nếu bạn thực sự cần một thư mục tồn tại trong thanh toán, bạn nên tạo một tệp trong đó. .gitignore hoạt động tốt cho mục đích này; bạn có thể để trống hoặc điền vào tên của các tệp bạn muốn hiển thị trong thư mục.
Tôi đã cam kết thư mục trước đó và muốn xóa thư mục trong lịch sử.
Tôi đã làm như sau:
Thêm thư mục vào .gitignore
:
echo Folder_Name/ >> .gitignore
Xóa khỏi tất cả các cam kết:
git filter-branch --index-filter 'git rm -rf --cached --ignore-unmatch Folder_Name/' --prune-empty --tag-name-filter cat -- --all
xóa các giới thiệu khỏi các cam kết cũ:
git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d
Đảm bảo tất cả các ref cũ được loại bỏ hoàn toàn
rm -Rf .git/logs .git/refs/original
Thực hiện thu gom rác
git gc --prune=all --aggressive
đẩy bạn thay đổi vào kho lưu trữ trực tuyến:
git push
Bạn đã làm xong ở đây.
Nhưng bạn có thể làm như sau để đẩy tất cả các thay đổi tới tất cả các nhánh bằng: Nhưng hãy cẩn thận với lệnh này!
git push origin --all --force
git push origin --tags --force
Sau đó, thư mục đã bị xóa khỏi git, nhưng không bị xóa khỏi đĩa cục bộ.
để xóa các thư mục trống
Tôi muốn xóa một thư mục trống (thư mục) tôi đã tạo, git không thể xóa nó, sau một số nghiên cứu tôi đã học được Git không theo dõi các thư mục trống. Nếu bạn có một thư mục trống trong cây làm việc của mình, bạn chỉ cần xóa nó bằng
rm -r folderName
Không cần liên quan đến Git.
Bạn có thể sử dụng Cây nguồn Attlasian (Windows) ( https://www.atlassian.com/software/sourcetree/overview ). Chỉ cần chọn các tập tin từ cây và nhấn nút "Xóa" ở trên cùng. Các tệp sẽ bị xóa khỏi kho lưu trữ cục bộ và cơ sở dữ liệu git cục bộ. Rồi Cam kết, rồi đẩy.
Một trong những đồng nghiệp của tôi đã đề xuất BFG Repo-Cleaner mà tôi nghĩ là mạnh mẽ. Nó không chỉ xóa dữ liệu không mong muốn mà còn xóa sạch kho lưu trữ của bạn khỏi mọi thông tin cam kết liên quan.
Để thêm thư mục mới:
mkdir <YOUR-DIRECTORY>
Nhưng bây giờ Git không biết thư mục mới này, vì Git theo dõi tệp không phải thư mục TRỰC TIẾP
git status
Git sẽ không nhận thức được với thay đổi chúng tôi đã thực hiện, vì vậy chúng tôi thêm .keep
tệp ẩn để Git nhận biết bằng thay đổi mới này.
touch /YOUR-directory/.keep
Bây giờ, nếu bạn nhấn git status
Git sẽ nhận thức được với các thay đổi.
Và nếu bạn muốn xóa thư mục, bạn nên sử dụng lệnh này.
rm -r <YOUR-DIRECTORY>
Và nếu bạn kiểm tra bằng cách sử dụng git status
, bạn sẽ thấy thư mục đã bị xóa.
Một sự kết hợp của 2 câu trả lời làm việc cho tôi
git rm -r one-of-the-directories
git commit . -m "Remove duplicated directory"
git push
nếu nó vẫn hiển thị một số cảnh báo, hãy xóa các tệp theo cách thủ công
git filter-branch --tree-filter 'rm -rf path/to/your/file' HEAD
git push