Làm cách nào để xóa các tập tin .orig sau khi hợp nhất từ ​​kho git?


160

Một số cách các tệp .orig được kiểm tra trong kho git của tôi trong quá trình hợp nhất, hiện được hiển thị trong khu vực được sửa đổi và không theo dõi. Nhưng tôi không muốn tập tin này nữa trong kho lưu trữ của tôi. Làm thế nào để làm điều đó.

    modified:   Gemfile.lock.orig
    #   modified:   Gemfile.orig
    #   modified:   app/assets/images/bg_required.png.orig
    #   modified:   app/assets/javascripts/application.js.orig

    etc...

Bất kỳ trợ giúp sẽ được đánh giá cao.



@ziu, tôi muốn xóa các tệp đã có trong kho lưu trữ của mình, được kiểm tra bằng git merge hoặc bởi một số nhà phát triển khác
maximus

1
Tôi đã bỏ lỡ phần về các tập tin đăng ký. Tuy nhiên, các tệp .orig được ghi bởi mergetool. Nghe có vẻ như là một giải quyết xung đột không trong sạch.
ziu

Bạn có cần phải loại bỏ hoàn toàn các tập tin từ toàn bộ lịch sử?
xếp hàng

Câu trả lời:


253

Giải pháp tốt nhất trong trường hợp này là giữ cho nó đơn giản và loại bỏ các tệp đó độc lập với git:

cd /your/repo/directory
find . -name '*.orig' -delete 

Ngoài ra, trong Windows / PowerShell, bạn có thể chạy lệnh sau

cd \your\repo\directory
Get-ChildItem -Recurse -Filter '*.orig' | Remove-Item

14
Nếu bạn nhận được một lỗi vị ngữ sử dụng: find. -name '* .orig' | xargs rm -f
Neil

Giống như một cảnh báo, sử dụng 'find -delete' có thể nguy hiểm. Vui lòng kiểm tra xem thư mục (trong trường hợp này là '.') Là chính xác để đảm bảo rằng bạn chỉ xóa những gì bạn muốn xóa
kingledion

8
Đó là một nỗi đau git clean -dfkhông làm điều đó. Tại sao chúng ta phải tự dọn sạch rác mà nó để lại?
Sridhar Sarnobat

Còn Windows thì sao?
Panzercrisis

3
@Panzercrisis nếu bạn đang sử dụng Windows, có lẽ bạn đã có trình giả lập thiết bị đầu cuối thông qua đó bạn giao tiếp với Git. Tôi muốn giới thiệu "gitforwindows" có chứa BASH với tất cả các công cụ cần thiết khác.
TheChymera

151

Hãy thử git cleanthêm thông tin bạn có thể tìm thấy ở đây hoặc ở đây


1
Tôi có thể dọn sạch các tệp không bị theo dõi, nhưng về việc loại bỏ các tệp đó đã có trong kho lưu trữ.
châm ngôn

trước tiên bạn phải xóa tệp khỏi kho lưu trữ git rm <filename>và sau đó xác nhận. Sau khi thêm tệp * .orig vào git bỏ qua.
Amar

4
Tôi nghĩ rằng đây là một giải pháp tốt hơn so với câu trả lời.
Orgmir

51
git clean -ithực sự dễ thương. nó sẽ cung cấp cho bạn một danh sách các tệp sẽ bị xóa và cung cấp cho bạn các tùy chọn về cách xử lý danh sách (lọc danh sách, có thể xóa mọi thứ trong danh sách và một số tùy chọn khác).
PPPaul

1
Bạn có thể sử dụng git clean với các mẫu để giúp chỉ xóa các tệp * .orig: git clean -f -e '*.*' -e '!*.orig' Chỉ có một mẫu loại trừ, nhưng nó có một chút hỗ trợ cho các mẫu âm. Vì vậy, chúng tôi có thể loại trừ tất cả các tệp *.*và sau đó phủ nhận loại trừ chỉ các *.origtệp.
leorleor


6

Bạn có thể bỏ qua các tệp bằng cách sử dụng .gitignore

Chỉ cần đặt * .orig trong danh sách như hiển thị ở đây

https://help.github.com/articles/ignoring-files

để xóa các tệp hiện tại, bạn có thể tạo tập lệnh shell và chạy từ thư mục dự án như bên dưới

for file in `find *.orig -type f -print`
do
   echo "Deleting file $file"
   git rm $file -f       
done

5
Mặc dù anh ấy chắc chắn có thể làm điều này, nhưng đó không phải là điều đúng đắn ở đây :)
Sergio Tulentsev

1
Tôi nghĩ rằng đó là một ý tưởng tốt vì nó giữ bản sao lưu nhưng không can thiệp vào các tệp được dàn dựng
akazemis

@akazemis - bạn cũng nghĩ vậy, nhưng khi bạn đang tìm kiếm mã, bạn sẽ thấy gấp đôi số kết quả tìm kiếm mà bạn muốn (điều này mang lại cho bạn nhận thức sai về những gì trong mã mới nhất của bạn). Thật hiếm khi tôi chỉ sống với nguy cơ không có tệp orig. Tốt hơn là chỉ cần cam kết thường xuyên.
Sridhar Sarnobat

5

Thật không may, git cleannó không hoạt động với tôi vì tôi đã *.origthêm vào tệp gitignore toàn cầu của mình, vì vậy chúng cũng bị bỏ qua. Ngay cả việc chạy git clean -xcũng không tốt vì tôi không muốn tất cả các tệp bị bỏ qua của mình bị xóa. git clean -ilà hữu ích, nhưng thực sự tôi không muốn phải xem lại từng tệp.

Tuy nhiên, chúng ta có thể sử dụng một mẫu loại trừ và phủ định kết quả khớp. Xem trước với lệnh này:

git clean -e '!*.orig' --dry-run

Sau đó, khi bạn tự tin, hãy chuyển forcecờ để thực sự xóa chúng:

git clean -e '!*.orig' -f

Dựa trên nhận xét của leorleor


3

git rm Gemfile.lock.orig và phần còn lại của các tập tin bạn không cần. git commit --amend

Để loại bỏ hoàn toàn những đốm màu, git gc --prune=0 --aggressive


@linquizebut cam kết của git rm Gemfile.lock.orig sẽ đi vào cam kết cuối cùng bằng cách sử dụng sửa đổi, phải không? Có cách nào khác để không có bất kỳ cam kết nào cho tập tin đó không?
châm ngôn

2

Đối với tôi git clean -fđã xóa tất cả các tệp * .oig. Và giữ những cái đã có trước đó.

Đây là những gì nó (gần như) trông giống như sau khi hợp nhất:

$ git status
On branch feature/xyz
Your branch is ahead of 'origin/feature/xyz' by 568 commits.
  (use "git push" to publish your local commits)

Untracked files:
  (use "git add <file>..." to include in what will be committed)

    .idea/codeStyles/
    .idea/misc.xml.orig

.idea/codeStyles/đã ở đó trước khi hợp nhất thành một tệp không bị theo dõi. .idea/misc.xml.orig(và nhiều hơn nữa) đã được gỡ bỏ.

=> Sử dụng git clean -f:

$ git clean -f
Removing .idea/misc.xml.orig

dẫn đến:

$ git status
On branch feature/xyz
Your branch is ahead of 'origin/feature/xyz' by 568 commits.
  (use "git push" to publish your local commits)

Untracked files:
  (use "git add <file>..." to include in what will be committed)

    .idea/codeStyles/

0

bạn chỉ có thể làm git status -s | grep "\.orig$" | awk '{print $2}' | xargs -n1 -r echo rm

TL; DR;

git status -s cho phép bạn lấy tất cả các tệp bị sửa đổi / thiếu đối với chỉ mục

grep "\.orig$" lọc ra các tập tin, giữ kết thúc bằng ".orig"

awk '{print $2}' liệt kê tên tệp (bỏ qua thông tin git, ví dụ A, M, ??)

xargs -n1 -r echo rm in xóa các lệnh trên mọi đối số (-n1: một lần và -r: bỏ qua khi trống) chỉ cần sao chép và dán các lệnh kiểm tra hai lần để xóa các tệp.


Trong khi điều này có thể trả lời câu hỏi của tác giả, nó thiếu một số từ giải thích và / hoặc liên kết đến tài liệu. Đoạn mã thô không hữu ích lắm nếu không có một số cụm từ xung quanh chúng. Bạn cũng có thể tìm thấy làm thế nào để viết một câu trả lời tốt rất hữu ích. Vui lòng chỉnh sửa câu trả lời của bạn.
hellow

-4

git rm <file>

http://git-scm.com/docs/git-rm

Đồng thời thêm tệp / thư mục bạn muốn bỏ qua vào tệp .gitignore của bạn.


git rm <file> <file>Chỉ cần liệt kê chúng.
veritas1

Sau đó, bạn cần liệt kê tất cả các tệp hoặc sử dụng một công cụ như find để chuyển chúng đến git rm hoặc sử dụng shell shell và lặp qua chúng. Git không sao chép chức năng dòng lệnh Unix tiêu chuẩn này.
mabraham

1
tập tin orig không được thêm vào kho lưu trữ, vì vậy không cần sử dụng git rm, rmthay vào đó chỉ cần sử dụng
Edson Medina
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.