Tôi có một dự án với git và tôi chỉ muốn sao chép hoặc kéo một thư mục cụ thể, như myproject / javascript giống như subversion.
thực hiện một số thay đổi, cam kết và đẩy lùi một lần nữa.
Có thể không?
Tôi có một dự án với git và tôi chỉ muốn sao chép hoặc kéo một thư mục cụ thể, như myproject / javascript giống như subversion.
thực hiện một số thay đổi, cam kết và đẩy lùi một lần nữa.
Có thể không?
Câu trả lời:
git fetch
git checkout HEAD path/to/your/dir/or/file
Trong trường hợp " path/...
" trong (3) bắt đầu từ thư mục ngay dưới gốc repo chứa của bạn " .../file
"
LƯU Ý rằng thay vì "CHÍNH", mã băm của một cam kết cụ thể có thể được sử dụng, và sau đó bạn sẽ nhận được sửa đổi (tệp) hoặc sửa đổi (dir) cụ thể cho cam kết đó.
--
không bắt buộc. Nó buộc các bit sau khi nó được hiểu là một đường dẫn. Vì vậy, vâng, nếu bạn có một tệp có tên --help
mà bạn muốn thanh toán, thì cần phải thêm tiền tố vào các dấu gạch nối này:git checkout HEAD -- --help
Trong một thư mục trống:
git init
git remote add [REMOTE_NAME] [GIT_URL]
git fetch REMOTE_NAME
git checkout REMOTE_NAME/BRANCH -- path/to/directory
fetch
hoặc checkout
lệnh nào, chúng ta chỉ cần thực hiện yêu cầu kéo sau remote add
lệnh để có được toàn bộ nhánh chính.
Sau khi tìm kiếm một câu trả lời, không tìm kiếm, từ bỏ, thử lại, tôi cuối cùng đã tìm ra giải pháp cho vấn đề này trong một chủ đề SO khác:
Làm thế nào để git-pull tất cả trừ một thư mục
Để sao chép-dán những gì có:
git init
git remote add -f origin <url>
git config core.sparsecheckout true
echo <dir1>/ >> .git/info/sparse-checkout
echo <dir2>/ >> .git/info/sparse-checkout
echo <dir3>/ >> .git/info/sparse-checkout
git pull origin master
Để làm những gì OP muốn (chỉ hoạt động trên một thư mục), chỉ cần thêm một thư mục đó vào .git/info/sparse-checkout
, khi thực hiện các bước trên.
Rất cám ơn @cforbish!
master
. Chỉ cần chắc chắn rằng bạn làm git branch --set-upstream-to=origin/<branch>
để kéo chính xác
Điều đó là không thể. Bạn cần kéo tất cả các kho lưu trữ hoặc không có gì.
Có lẽ lệnh này có thể hữu ích:
git archive --remote=MyRemoteGitRepo --format=tar BranchName_or_commit path/to/your/dir/or/file > files.tar
"Et voilà"
git clone --filter
từ Git 2.19
Tùy chọn này thực sự sẽ bỏ qua việc tìm nạp các đối tượng không cần thiết từ máy chủ.
Tôi đã viết một câu trả lời chi tiết giải thích trạng thái hỗ trợ hiện tại tại: Làm cách nào để sao chép thư mục con của kho lưu trữ Git?
Rất có khả năng là bất cứ điều gì được thực hiện git clone
trong khu vực đó cũng sẽ có git pull
tương tự.
Đã thử và thử nghiệm công trình này!
mkdir <directory name> ; //Same directory name as the one you want to pull
cd <directory name>;
git remote add origin <GIT_URL>;
git checkout -b '<branch name>';
git config core.sparsecheckout true;
echo <directory name>/ >> .git/info/sparse-checkout;
git pull origin <pull branch name>
Hy vọng điều này là hữu ích!
Đôi khi, bạn chỉ muốn xem xét các bản sao trước đó của tập tin mà không gặp phải sự khó khăn khi đi qua các khác biệt.
Trong trường hợp như vậy, thật dễ dàng để tạo một bản sao của kho lưu trữ và kiểm tra cam kết cụ thể mà bạn quan tâm và xem xét thư mục con trong kho lưu trữ nhân bản đó. Bởi vì tất cả mọi thứ là cục bộ, bạn chỉ có thể xóa bản sao này khi bạn hoàn thành.
Đối với tất cả những gì phải vật lộn với các đường dẫn tệp lý thuyết và ví dụ như tôi đã làm, đây là một ví dụ trong thế giới thực: Microsoft cung cấp tài liệu và ví dụ của họ trên git hub, thật không may là họ tập hợp tất cả các tệp ví dụ của họ cho một số lượng lớn chủ đề trong kho lưu trữ này:
https://github.com/microsoftarchive/msdn-code-gallery-community-s-z
Tôi chỉ quan tâm đến các tệp js Microsoft Dynamics trong đường dẫn
msdn-code-gallery-community-s-z/Sdk.Soap.js/
vì vậy tôi đã làm như sau
tạo một
msdn-code-gallery-community-s-zSdkSoapjs\.git\info\sparse-checkout
tập tin trong thư mục kho lưu trữ của tôi trên đĩa
git sparse-checkout init
trong thư mục đó bằng cách sử dụng cmd trên windows
Nội dung tập tin của
msdn-code-gallery-community-s-zSdkSoapjs\.git\info\sparse-checkout
Là
Sdk.Soap.js/*
cuối cùng làm một
git pull origin master