Điểm:13

Sự khác biệt giữa git add * và git add là gì?

lá cờ us

Sự khác biệt giữa các lệnh là gì git thêm *git thêm . khi tôi đặt tham số *. cho phù hợp? Danh sách hệ thống tệp nào trả về trong cả hai trường hợp?

lá cờ in
eis
Xem: [stackoverflow: git add * (dấu hoa thị) so với git add . (dấu chấm)](https://stackoverflow.com/questions/26042390/git-add-asterisk-vs-git-add-period)
lá cờ ag
Điều này phụ thuộc vào việc bạn sử dụng trình thông dịch lệnh nào để thực thi lệnh git.
Điểm:32
lá cờ jp
Dan
  • * là một quả cầu bash. Nó sẽ mở rộng ra tất cả các tệp trong thư mục bạn đang truy cập, ngoại trừ tệp dotfile (tệp bắt đầu bằng dấu chấm (.)).
  • . có nghĩa là thư mục hiện tại.

Kết quả có thể khá khác nhau tùy thuộc vào nội dung thư mục của bạn và nếu bạn có .gitignore tập tin.

Hãy xem xét bạn có các tệp và thư mục sau trong thư mục của mình:

.dotfile-điều-phải-được-cam-kết
.git/
.gitignore
some-file-that-is-in-gitignore
một số tập tin khác

Khi bạn chạy git thêm *, toàn cầu được mở rộng trước khi lệnh git chạy. Vì vậy, những gì lệnh git nhận được như sau:

git add some-file-that-is-in-gitignore some-other-file

Điều này gây ra bốn vấn đề ở đây.

  1. Git sẽ phàn nàn rằng some-file-that-is-in-gitignore không thể thêm vào và sẽ yêu cầu bạn thêm lực (-f) nếu bạn thực sự muốn thêm nó.
  2. cả hai .dotfile-điều-phải-được-cam-kết.gitignore không được thêm vào như * không mở rộng thành dotfiles.
  3. Nếu bạn đã xóa các tệp trong thư mục bạn đang ở, * không bao giờ có thể mở rộng sang những tệp đó, vì vậy các tệp đã xóa sẽ không được sắp xếp.
  4. Nếu bạn đã đổi tên các tệp trong thư mục bạn đang ở, * không bao giờ có thể mở rộng sang tên cũ nhưng nó sẽ mở rộng sang tên mới. Vì vậy, những gì git sẽ thấy là bạn đã thêm một tệp mới và vì tên cũ không được phân tầng nên bạn sẽ có cùng một tệp tồn tại hai lần, với tên cũ và tên mới.

Tuy nhiên, chạy git thêm . yêu cầu git thêm thư mục hiện tại mà bạn đang ở mà không chỉ định tệp nào sẽ thêm. Trong trường hợp này, git sẽ kiểm tra .gitignore tệp và thêm đệ quy tất cả các tệp không được đề cập trong .gitignore.

Tóm tắt:

  • Bạn nên sử dụng git thêm . không phải git thêm *.

Thậm chí còn tốt hơn:

  • Sử dụng git thêm đầy đủ/tệp/đường dẫn để bạn không vô tình thêm nội dung chưa sẵn sàng để thêm vào.

Và thậm chí tốt hơn nhiều:

  • Sử dụng git thêm -p để xem lại các thay đổi của bạn và chọn các bản vá bạn muốn thêm vào.
lá cờ in
Thậm chí tốt hơn: `git add be/explicit`. Bạn không nên sử dụng `git add *` hay `git add .`, bởi vì bạn nên cân nhắc kỹ hơn về những gì bạn đang thêm vào git.
lá cờ st
Mặc dù cá nhân tôi là một người hâm mộ cuồng nhiệt của bạn `git add -p` và sử dụng nó mọi lúc, nhưng cần lưu ý rằng có một mối nguy hiểm lớn liên quan đến nó, cụ thể là bạn đang tạo ra một trạng thái chưa bao giờ tồn tại trong này trên đĩa và do đó có thể chưa bao giờ được thử nghiệm. Vì lý do này, nó bị cấm trong một số hướng dẫn sử dụng Git ở một số tổ chức.
John C avatar
lá cờ tr
Tôi cũng đồng ý với việc sử dụng `git add .`, nhưng sẽ lưu ý rằng đó là thư mục hiện tại trở xuống - vì vậy nếu bạn tình cờ xuống một thư mục con (giả sử, tại dòng lệnh, không phải công cụ GUI), thì bạn sẽ' không thêm bất kỳ thay đổi nào trong các thư mục cấp cao hơn. Tôi có xu hướng thực hiện `git status` tiếp theo, chỉ để đảm bảo rằng tôi không bỏ lỡ điều gì.
David Z avatar
lá cờ es
@JörgWMittag Thật thú vị... mặc dù tôi cho rằng nguy hiểm chỉ phát sinh nếu bạn không quay lại và kiểm tra cam kết kết quả.Làm bài kiểm tra đó là một điều hoàn toàn hợp lý để làm và mong đợi của mọi người. Vì vậy, cá nhân tôi không đồng ý rằng nó nên được ghi nhận; Tôi nghĩ rằng sẽ gây mất tập trung hơn là đáng để thêm điều đó vào câu trả lời.
lá cờ in
eis
câu trả lời này tương đối dài và vẫn bỏ qua tất cả những thứ quan trọng. các trường hợp sử dụng quan trọng nhất để sử dụng dấu chấm là 1) tất cả các thư mục con và 2) tất cả các thao tác xóa/đổi tên, thậm chí không được đề cập ở đây.
lá cờ jp
Dan
@eis Bạn nói đúng về việc xóa/đổi tên. Tôi sẽ thêm chi tiết về những điều đó. Nhưng đối với các thư mục con, `git add .` và `git add *` hoạt động theo cùng một cách đối với những thư mục đó miễn là tên của chúng không có dấu chấm.
Điểm:3
lá cờ in

Một cái gì đó khác không được chỉ ra bởi câu trả lời hiện tại sẽ là git thêm * sẽ không thông báo nếu bạn đã xóa hoặc đổi tên bất kỳ tệp nào, nhưng git thêm . sẽ.

Điểm:2
lá cờ my

Tóm tắt ngắn

git thêm * có nghĩa là thêm tất cả các tệp trong thư mục hiện tại, ngoại trừ các tệp có tên bắt đầu bằng dấu chấm. Đây là chức năng shell của bạn và Git chỉ nhận được một danh sách các tệp.


git thêm . không có ý nghĩa đặc biệt nào trong trình bao của bạn, và do đó Git thêm toàn bộ thư mục theo cách đệ quy, gần như giống nhau, nhưng bao gồm các tệp có tên bắt đầu bằng dấu chấm.


Câu trả lời được điều chỉnh từ stackoverflow

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.