Nếu tôi hiểu rõ vấn đề của bạn, bạn muốn những điều sau đây:
- Có các tệp phương tiện của bạn được lưu trữ trong một kho lưu trữ git duy nhất, được sử dụng bởi nhiều dự án
- Nếu bạn sửa đổi tệp phương tiện trong bất kỳ dự án nào trong máy cục bộ của mình, tệp đó sẽ xuất hiện ngay lập tức trong mọi dự án khác (vì vậy bạn không muốn cam kết + đẩy + kéo mọi lúc)
Thật không may, không có giải pháp cuối cùng cho những gì bạn muốn, nhưng có một số điều mà bạn có thể làm cho cuộc sống của bạn dễ dàng hơn.
Trước tiên, bạn nên quyết định một điều quan trọng: bạn có muốn lưu trữ cho mọi phiên bản trong kho dự án của bạn một tham chiếu đến phiên bản của tệp phương tiện không? Vì vậy, ví dụ nếu bạn có một dự án có tên example.com, bạn có cần biết style.css nào được sử dụng 2 tuần trước hay mới nhất luôn luôn là (hoặc chủ yếu) là tốt nhất không?
Nếu bạn không cần phải biết điều đó, giải pháp rất dễ dàng:
- tạo một kho lưu trữ cho các tệp phương tiện và một cho mỗi dự án
- tạo một liên kết tượng trưng trong các dự án của bạn trỏ đến kho lưu trữ phương tiện nhân bản cục bộ. Bạn có thể tạo một liên kết tượng trưng tương đối (ví dụ ../media) và giả sử rằng mọi người sẽ kiểm tra dự án để thư mục phương tiện ở cùng một vị trí hoặc viết tên của liên kết tượng trưng vào .gitignore và mọi người có thể quyết định nơi anh / cô ấy đặt các tập tin phương tiện truyền thông.
Tuy nhiên, trong hầu hết các trường hợp, bạn muốn biết thông tin phiên bản này. Trong trường hợp này, bạn có hai lựa chọn:
Lưu trữ mọi dự án trong một kho lưu trữ lớn. Ưu điểm của giải pháp này là bạn sẽ chỉ có 1 bản sao của kho phương tiện. Nhược điểm lớn là việc chuyển đổi giữa các phiên bản dự án khó hơn nhiều (nếu bạn thanh toán sang phiên bản khác, bạn sẽ luôn sửa đổi TẤT CẢ các dự án)
Sử dụng mô hình con (như được giải thích trong câu trả lời 1). Bằng cách này, bạn sẽ lưu trữ các tệp phương tiện trong một kho lưu trữ và các dự án sẽ chỉ chứa một tham chiếu đến một phiên bản repo phương tiện cụ thể. Nhưng theo cách này, thông thường bạn sẽ có nhiều bản sao cục bộ của kho phương tiện và bạn không thể dễ dàng sửa đổi tệp phương tiện trong tất cả các dự án.
Nếu tôi là bạn, có lẽ tôi sẽ chọn giải pháp đầu tiên hoặc thứ ba (liên kết tượng trưng hoặc mô hình con). Nếu bạn chọn sử dụng mô hình con, bạn vẫn có thể làm rất nhiều thứ để làm cho cuộc sống của bạn dễ dàng hơn:
Trước khi cam kết, bạn có thể đổi tên thư mục mô hình con và đặt liên kết tượng trưng vào thư mục phương tiện chung. Khi bạn đã sẵn sàng để cam kết, bạn có thể xóa liên kết tượng trưng và xóa mô hình con trở lại, sau đó cam kết.
Bạn có thể thêm một trong các bản sao của kho lưu trữ phương tiện dưới dạng kho lưu trữ từ xa vào tất cả các dự án của bạn.
Bạn có thể thêm các thư mục cục bộ như một điều khiển từ xa theo cách này:
cd /my/project2/media
git remote add project1 /my/project1/media
Nếu bạn sửa đổi một tệp trong / my / project1 / media, bạn có thể cam kết nó và kéo nó từ / my / project2 / media mà không cần đẩy nó đến một máy chủ từ xa:
cd /my/project1/media
git commit -a -m "message"
cd /my/project2/media
git pull project1 master
Bạn có thể xóa những cam kết này sau (với git reset) vì bạn chưa chia sẻ chúng với những người dùng khác.