Câu trả lời:
Có một cái nhìn đầu tiên tại git help archive
. archive
là một lệnh git cho phép tạo tài liệu lưu trữ chỉ chứa các tệp được theo dõi git. Có lẽ là những gì bạn đang tìm kiếm. Một ví dụ được liệt kê ở cuối trang man:
git archive --format=tar --prefix=git-1.4.0/ v1.4.0 | gzip >git-1.4.0.tar.gz
Câu trả lời đơn giản nhất: Thêm --exclude-vcs
--exclude-vcs
Điều này không bao gồm tất cả các thư mục hệ thống kiểm soát phiên bản
Cá nhân tôi sử dụng
tar -zcvf foo.tar.gz ./FOLDER_NAME --exclude-vcs
vì vậy tất cả những gì bạn cần làm là thêm --exclude-vcs vào cuối lệnh.
tar --exclude-vcs -zcvf foo.tar.gz ./FOLDER_NAME
Nếu bạn muốn kho lưu trữ bao gồm các tệp được theo dõi bởi git, nhưng không phải chính kho lưu trữ git hoặc bất kỳ tệp nào được tạo hoặc không được theo dõi, thì hãy sử dụnggit archive
.
Nếu bạn đặc biệt muốn loại trừ .git
nhưng bao gồm mọi thứ khác, trong Linux hoặc FreeBSD hoặc OSX hoặc Cygwin, tar có một tùy chọn đơn giản để loại trừ một thư mục:
tar -c --exclude .git -f - foo | gzip >foo.tgz
Với GNU tar (tức là theo Linux hoặc Cygwin), bạn có thể rút ngắn điều này thành tar czf foo.tgz --exclude .git foo
.
Cách POSIX tạo tài liệu lưu trữ là pax
.
pax -w -t -s '!.*/\.git$!!' -s '!.*/\.git/.*!!' foo | gzip >foo.tgz
git
biên dịch trên bất kỳ hệ thống nào tar
không có sẵn? :-)
tar
không có --exclude
tùy chọn, chẳng hạn như OpenBSD (thừa nhận trùng lặp s
tùy chọn của pax , nhưng đó không phải là một phần mở rộng cú pháp lệnh tar phổ biến).
Nhờ một câu trả lời mà tôi nhận được một trong những câu hỏi của mình, tôi đã tìm ra một giải pháp khác. Vì vậy, để hoàn thiện, đây là một giải pháp sử dụng find
:
find . -path './.git' -prune -o -print |
tar -czvf ../archive.tgz --no-recursion -T -
Và nếu bạn muốn loại trừ .git
các thư mục có thể có trong thư mục (phụ) +:
find . -path '*/.git' -prune -o -print |
tar -czvf ../archive.tgz --no-recursion -T -
Latter cũng có thể đạt được thông qua:
find . -type d -name '.git' -prune -o -print |
tar -czvf ../archive.tgz --no-recursion -T -
Khá tiện nếu bạn có thể sử dụng các kỹ thuật lọc khác find
, ví dụ: ngày sửa đổi, quyền, chế độ
(Như tên tập tin như vậy thường cũng như hình thành được giả định, nếu không bạn cần phải sử dụng rỗng byte như dải phân cách mà có thể có nghĩa là -print0
cho find
và --null
cho tar
nếu được hỗ trợ).