2011-11-23 40 views
42

Làm thế nào để bạn thêm các tệp thực thi Linux vào .gitignore mà không cung cấp cho chúng một phần mở rộng rõ ràng và không đặt chúng trong một thư mục cụ thể hoặc/bin? Hầu hết được đặt tên giống như tệp C mà từ đó chúng được biên dịch mà không có phần mở rộng ".c".Cách thêm tệp thực thi Linux vào .gitignore?

+0

Đây là một bản sao của http://stackoverflow.com/questions/5711120/gitignore-without-binary-files Có thể hợp nhất chúng. –

+0

Không, có sự khác biệt giữa các tệp thi hành và tệp nhị phân. Tôi thấy cần phải bỏ qua cả tập lệnh thực thi và tệp nhị phân. Tôi không nghĩ câu hỏi này trùng lặp. – Alexander

Trả lời

10

Tôi sẽ đặt chúng một cách rõ ràng trong dự án .gitignore. Nó không thanh lịch, nhưng tôi tưởng tượng dự án của bạn không có rằng nhiều người trong số họ.

+3

Lý do tôi tình cờ gặp câu hỏi này là chính xác vì nó * có * mà nhiều người trong số họ. –

3

Một cách tạo ra sự khác biệt so với bạn .gitignore trong một đi từ tất cả các file thực thi từ thư mục hiện hành:

find . -perm /111 -type f | sed 's#^./##' | sort | diff -u .gitignore - 

này tạo ra một diff có nghĩa là bạn không bị mất bất kỳ thay đổi bằng tay để các tập tin. Điều này giả định tệp .gitignore của bạn đã được sắp xếp. Các phần sed chỉ dải ./ hàng đầu mà tìm thấy tạo ra.

Không có cách tự động nào để bỏ qua chỉ các tệp thực thi, vì vậy bạn sẽ luôn phải quản lý tệp.

26

Bạn có thể bỏ qua tất cả, nhưng tệp mã nguồn không?

Ví dụ:

* 
!*.c 
!Makefile 
3

Tôi đã viết một kịch bản để tự động thêm thực thi ELF để .gitignore.

git-ignore-elf:

#!/bin/sh 
set -eu 
cd "$(git rev-parse --show-toplevel)" 
file=.gitignore 
new=$file.new.$$ 
(
if [ -e "$file" ]; then 
    cat "$file" 
fi 
find . -name .git -prune -o -type f ! -name '*.o' ! -name '*.so' \ 
    -print0 | xargs -0 file | grep ': *ELF ' | sed 's/:.*//' | 
sed 's,^./,,' 
) | perl -ne 'print if !$already{$_}++' >"$new" 
mv "$new" "$file" 

Các tính năng:

  • bắt đầu tìm kiếm từ thư mục cấp cao nhất (có thể là một misfeature!)
  • bỏ qua file ELF, trừ .o và các file .so có thể bỏ qua với quy tắc chung là
  • duy trì các mục nhập hiện có trong .gitignore mà không cần sao chép chúng

phiên bản đơn Kịch bản này là ở đây: http://sam.nipl.net/b/git-ignore-elf-1

Đây là một phiên bản mô-đun hơn, mà phụ thuộc vào kịch bản khác (git-root, tìm-tinh, uniqo) từ cùng một vị trí: http://sam.nipl.net/b/git-ignore-elf

+0

có câu trả lời tương tự bằng cách sử dụng python và tệp (1), ở đây: http://stackoverflow.com/a/19749478/218294 –

4

Hầu hết các nhà phát triển thường có một thư mục build trong dự án của họ nơi thực thi quá trình xây dựng thực tế. Vì vậy, tất cả các tệp thi hành, .o, .so, .a, v.v. ở đó và thư mục xây dựng này được thêm vào .gitignore.

Các vấn đề liên quan