Có những cạm bẫy khi đặt $ HOME trong git thay vì dotfiles liên kết?


38

Tôi đã nhiều năm $HOMEkiểm tra toàn bộ thư mục của mình . Điều này đã bao gồm tất cả các dotfiles và hồ sơ ứng dụng của tôi, nhiều tập lệnh, công cụ và hack, cấu trúc thư mục nhà cơ bản ưa thích của tôi, không phải là một vài dự án kỳ quặc và một kho dữ liệu ngẫu nhiên. Đây là một điều tốt. Trong khi nó kéo dài.

Nhưng nó đã ra khỏi tầm tay. Thanh toán cơ bản là giống nhau trên hàng tá hệ thống, nhưng không phải tất cả những thứ đó đều phù hợp với tất cả các máy của tôi. Nó thậm chí không chơi tốt với các bản phát hành khác nhau.

Tôi đang trong quá trình dọn dẹp nhà cửa - tách dữ liệu ra nơi nó thuộc về, tách ra một số tập lệnh thành các dự án riêng biệt, sửa một số liên kết bị hỏng trong những thứ nên được tự động hóa, v.v.

Mục đích của tôi là để thay thế subversionvới gitcho kiểm tra mục cấp đầu của $HOME, nhưng tôi muốn pare xuống này để chỉ những điều tôi muốn có trên tất cả các hệ thống của tôi, có nghĩa là dotfiles, một vài thư mục và một số kịch bản tùy chỉnh cơ bản.

Khi đọc lên mạng, rất nhiều người dường như đang thực hiện điều này bằng cách sử dụng phương pháp liên kết tượng trưng: sao chép vào thư mục con sau đó tạo liên kết tượng trưng từ $HOMEvào kho lưu trữ. $HOMEsự kiểm soát phiên bản đầy đủ của tôi trong hơn một thập kỷ, tôi không thích ý tưởng về cái aproach này và tôi không thể hiểu tại sao mọi người dường như rất ác cảm với phương thức thanh toán thẳng. Có những cạm bẫy tôi cần biết về cụ thể gitnhư là một kiểm tra cấp cao nhất cho $HOME?

PS Một phần là một bài tập về mã hóa tốt, tôi cũng đang lên kế hoạch để công khai kiểm tra gốc của mình trên github. Thật đáng sợ khi có bao nhiêu thông tin nhạy cảm về bảo mật mà tôi đã cho phép thu thập trong các tệp mà có thể chia sẻ được mà không cần suy nghĩ thứ hai! Mật khẩu WiFi, khóa RSA không mật khẩu, vv Eeek!


5
Tò mò điều gì dẫn đến niềm tin rằng $ HOME nên có thể chia sẻ mà không cần suy nghĩ thứ hai‽ Ngay cả các khóa riêng RSA được mã hóa cũng không nên chia sẻ.
derobert

3
nếu bạn thực sự đang nói về việc đưa nội dung của thư mục nhà của bạn vào git thì chỉ cần lưu ý: rất khó (nhưng không phải là không thể) tìm hiểu lịch sử git và cẩn thận loại bỏ các mục nhạy cảm vĩnh viễn (git được thiết kế để giúp tránh mất đồ), và cũng nên nhớ rằng khi bạn chuyển đổi chi nhánh hoặc kiểm tra bản sửa đổi trước đó gitsẽ thay đổi quyền của các tệp của bạn thành 644sau khi thanh toán, điều này không tốt cho những thứ như khóa ssh riêng. tuy nhiên etckeeperlà một giải pháp để sử dụng git với quyền cho / etc /
cwd

@derobert: Tôi biết rõ điều đó. Tôi đã không nói về việc công khai $ HOME, chỉ là các dotfiles và các tập lệnh tiện lợi. Đó là nơi tôi đã tìm thấy những thứ không thuộc về. Và vâng, tôi sẽ có thể chia sẻ .zshrc, .vimrcvà những thứ tương tự mà không cần phải vệ sinh chúng trước!
Caleb

4
Nếu bạn chưa thấy nó, hãy xem wiki và danh sách gửi thư của vcs , về cơ bản là mọi người đang thảo luận chính xác về điều này - làm thế nào để giữ $ HOME của bạn dưới sự kiểm soát sửa đổi.
Jim Paris

Tôi không biết bạn có thể thay đổi hành vi của git đến mức nào, nhưng ít nhất là cách nó hoạt động ngoài kho lưu trữ, nó khá tham lam khi tìm kiếm các tệp được theo dõi / không bị theo dõi / sửa đổi và nó tự động cảm thấy có trách nhiệm cho mọi tập tin. mrb đã nêu điều này. Đôi khi tôi cảm thấy khó chịu vì hành vi tham lam này ngay cả trong các dự án tương đối nhỏ, tôi không muốn điều đó trong thư mục nhà của mình. Tại sao muốn sử dụng git? Tôi cũng đang sử dụng một hệ thống phiên bản để đồng bộ hóa các tệp cấu hình của mình trên các máy chủ và tôi khá hài lòng với CVS vì nó rất đơn giản! Git rất (cũng vậy!) Mạnh mẽ cho điều đó
Bananguin

Câu trả lời:


17

, có ít nhất một cạm bẫy lớn khi xem xét gitđể quản lý một thư mục nhà không phải là mối quan tâm subversion.

Git là cả tham lam và đệ quy theo mặc định .

Subversion sẽ ngây thơ bỏ qua bất cứ điều gì nó không biết và nó dừng xử lý các thư mục lên hoặc xuống từ thanh toán của bạn khi nó đạt đến một cái mà nó không biết (hoặc thuộc về một kho lưu trữ khác). Git, mặt khác, tiếp tục đệ quy vào tất cả các thư mục con khiến việc kiểm tra lồng nhau rất phức tạp do các vấn đề về không gian tên. Vì thư mục nhà của bạn có khả năng cũng là nơi bạn kiểm tra và làm việc trên nhiều kho git khác, nên có thư mục chính của bạn trong git gần như chắc chắn sẽ khiến cuộc sống của bạn trở nên lộn xộn.

Hóa ra, đây là lý do chính khiến mọi người kiểm tra dotfiles của họ vào một thư mục bị cô lập và sau đó symlink vào nó. Nó giữ git tránh đường khi làm bất cứ điều gì khác trong bất kỳ thư mục con nào của bạn $HOME. Mặc dù đây hoàn toàn là vấn đề ưu tiên nếu kiểm tra nhà của bạn thành lật đổ, nó trở thành vấn đề cần thiết nếu sử dụng git.

Tuy nhiên , có một giải pháp thay thế. Git cho phép một cái gì đó gọi là "root giả" trong đó tất cả các máy móc lưu trữ được ẩn trong một thư mục thay thế có thể được tách biệt về mặt vật lý khỏi thư mục làm việc thanh toán. Kết quả là bộ công cụ git sẽ không bị lẫn lộn: nó thậm chí sẽ KHÔNG XEM kho lưu trữ của bạn, chỉ có bản sao hoạt động. Bằng cách đặt một vài biến môi trường, bạn có thể tìm ra git để tìm hàng hóa cho những thời điểm đó khi bạn đang quản lý thư mục chính của mình. Không có các biến môi trường được đặt, không ai là người khôn ngoan hơn và ngôi nhà của bạn trông giống như tập tin cổ điển.

Để làm cho thủ thuật này trôi chảy hơn một chút, có một số công cụ tuyệt vời hiện có. Các mailing list vcs-nhà có vẻ như nơi defacto để bắt đầu, và về trang có một bọc thuận tiện lên của howtos và kinh nghiệm của người dân. Trên đường đi là một số công cụ nhỏ tiện lợi như vcsh , mr . Nếu bạn muốn giữ thư mục chính của bạn trực tiếp trong git, vcsh gần như là một công cụ phải có. Nếu bạn kết thúc việc chia thư mục nhà của bạn thành nhiều mục đăng lại phía sau hậu trường, hãy kết hợp vcshvới cách mrnhanh chóng và không bẩn để quản lý tất cả cùng một lúc.


2
nhưng tại sao không thêm '*' vào tệp .gitignore của bạn? Bằng cách đó, git sẽ bỏ qua mọi thứ trừ các tệp đã có trong kho lưu trữ và bạn có thể thêm các tệp mới với git add -f <file>.
ALiX

@ALiX: Bởi vì các gitcông cụ vẫn sẽ xem xét bạn đang làm việc trên repo thư mục nhà của bạn ngay cả khi bạn đang ở trong một thư mục con đó là một repo git riêng cho một số dự án. Giải pháp đó sẽ khiến toàn bộ thư mục nhà của bạn vượt quá giới hạn cho tất cả các công việc git khác.
Caleb

5
nhưng một '*' trong .gitignore của bạn có nghĩa là tất cả các tệp không có trong repo home-dir của bạn bị bỏ qua. và khi bạn kiểm tra một repo git mới trong một số thư mục con, mọi thứ vẫn sẽ hoạt động như mong đợi (tôi nghĩ). Theo tôi biết, các công cụ git sẽ tìm thư mục .git đầu tiên trong khi di chuyển lên hệ thống phân cấp thư mục. Vì vậy, khi làm việc trong thư mục con, kho git chính xác sẽ được sử dụng. Tất nhiên, nếu bạn đang sử dụng các biến môi trường của git, tôi đoán mọi thứ có thể trở nên lộn xộn. Nhưng nếu không, tôi không thấy lý do tại sao điều này sẽ không hoạt động.
ALiX

@ALiX đúng. Repos git lồng nhau dường như hoạt động tốt miễn là bạn gitignore chúng trong repo cha. Tôi tự hỏi những nhược điểm của phương pháp rất đơn giản này, ngoài những vấn đề có thể xảy ra với các biến môi trường của git.
evanrmurphy

1
Đã thử nghiệm với điều này ngày hôm nay. Tôi nghĩ rằng /*hoạt động tốt hơn *bởi vì nó vẫn bỏ qua mọi thứ theo mặc định nhưng làm cho việc thêm thư mục dễ dàng hơn nhiều. Thay vì git add -ftôi đang sử dụng !các mẫu -prefixed như !/.vimrc!/.gitignore(cho chính tệp .gitignore) để bao gồm rõ ràng mọi thứ trong repo.
evanrmurphy

14

Tôi sẽ không muốn toàn bộ thư mục nhà của mình được kiểm tra vào kiểm soát phiên bản đơn giản vì điều đó có nghĩa là mọi thư mục con tôi truy cập sẽ có bối cảnh kiểm soát phiên bản của thư mục nhà của tôi. Các lệnh như git checkoutsẽ có một hành động thực tế trong trường hợp đó, gây ra vấn đề nếu tôi vô tình chạy một cái gì đó từ thư mục sai, cho dù đó là gitchính nó hoặc một tập lệnh gọi git.

Nó cũng làm cho nhiều khả năng thêm một cái gì đó vào repo mà bạn không muốn, điều này sẽ không thành vấn đề khi bạn đã đăng ký mọi thứ, nhưng bây giờ trở thành một vấn đề. Điều gì sẽ xảy ra nếu bạn vô tình thêm một tệp khóa riêng (có lẽ do thói quen) và đẩy nó vào github?

Phải nói rằng, tôi nghĩ rằng những bất lợi chính không thực sự mang tính kỹ thuật - chỉ muốn cứu tôi khỏi chính tôi.

Đối với liên kết tượng trưng: Bạn có thể sao chép repo của mình vào thư mục con và có một tập lệnh cập nhật bất kỳ liên kết tượng trưng nào cần được cập nhật. Tuy nhiên, số lượng bảo trì cần thiết cho kịch bản này có thể lớn hơn lợi ích của việc có nó; symlinking có thể ít hoạt động hơn.

Với các liên kết tượng trưng, ​​bạn cũng có thể dễ dàng thực hiện các bổ sung dành riêng cho phân phối (hoặc thậm chí cụ thể của máy chủ) được kiểm tra vào git. Tập lệnh cập nhật liên kết tượng trưng của bạn sẽ bỏ qua các tệp dành cho các nền tảng không tương thích hoặc các máy chủ khác nhau và chỉ cập nhật các tệp phù hợp.

Cái gì đó như:

HOMEREPO=$HOME/homerepo
HOST=$(hostname)
UNAME=$(uname)

for dotfile in $HOMEREPO/shared/* $HOMEREPO/host-$HOST/* $HOMEREPO/uname-$UNAME/*
do
    target=$HOME/$(basename $dotfile)
    [ ! -r $target ] && ln -s $dotfile $target
done

Cá nhân: Tôi sử dụng symlink và tôi không có thư mục symlink; chỉ các tập tin trong. Điều này mang lại cho tôi sự linh hoạt để thực hiện các thay đổi cục bộ trong các thư mục đó (ví dụ: thêm / xóa tệp). Thiết lập tài khoản của tôi trên một hệ thống mới thật tẻ nhạt vì tôi phải tạo lại tất cả các liên kết tượng trưng bằng tay.


Bất kỳ gitlệnh nào tôi chạy sẽ là cho chính thư mục chính hoặc sẽ bị chôn vùi ít nhất một sâu trong thư mục được cam kết NON. Sử dụng svncách ly một thư mục này khá hiệu quả và không gây rắc rối cho tôi trong một thập kỷ. Đoạn đầu tiên của bạn chỉ ra một cái gì đó khác. Đây thực sự là một sự khác biệt trong cách gitlàm việc?
Caleb

Ngoài ra, các cấu hình và tập lệnh của tôi đã có logic điều kiện cho các máy chủ và nền tảng khác nhau được tích hợp, do đó, sử dụng tập lệnh để thiết lập các liên kết khác nhau vì các điều kiện có vẻ không gitdễ dàng vượt qua các nhánh dễ dàng. Vẫn còn một cái gì đó tôi đang thiếu hoặc điều này sẽ đi xuống ưu tiên?
Caleb

3
Cách ly một thư mục không thực sự cô lập trong git- không chắc chắn về svn- nhưng ví dụ, git init foo && mkdir -p foo/bar/baz/spam && cd foo/bar/baz/spam && git status(hoặc các lệnh git khác) cho thấy bạn vẫn ở trong foobối cảnh kiểm soát phiên bản.
mrb

Configs & scripts: Không phải tất cả các dotfiles đều hỗ trợ các điều kiện, đó là lý do tại sao tôi đề xuất cách tiếp cận thay thế. Đây là tất cả những lý do mà tôi nghĩ mọi người không thích sử dụng kiểm soát phiên bản cho $HOME- và phiên bản không thực sự có giá trị đối với dotfiles imo - nhưng cuối cùng đó là thư mục chính của bạn, vì vậy nếu bạn thích sử dụng git và những vấn đề này không phải là vấn đề với bạn, đi cho nó
mrb

Cảm ơn bạn về thông tin. Trên thực tế nhận xét của bạn về git không cho phép cô lập là bit hữu ích nhất. Bạn có thể làm việc nổi bật vào câu trả lời của bạn. Subversion hành xử rất khác nhau về điểm đó và ý nghĩa của nó đối với trường hợp sử dụng này.
Caleb

6

Để đưa ra một quan điểm khác: Tôi có $ HOME dưới git từ bây giờ và không tìm thấy bất kỳ nhược điểm nào. Tôi rõ ràng không đồng bộ repo git này với github; Tôi sử dụng một dịch vụ có repos riêng. Tôi cũng không đặt bất kỳ tệp phương tiện hoặc tải xuống hoặc gói nào dưới sự kiểm soát của git.

  • git status là một loại danh sách kiểm tra "phải làm, để làm sạch".

  • Tôi có một ~/tmpcho những thứ tạm thời, được chỉ định.

  • Tôi muốn thấy git statusbất cứ điều gì mà một phần mềm được cài đặt gần đây dám thêm vào $ HOME của tôi và thường xóa các tệp này hoặc thậm chí gỡ cài đặt thủ phạm.

  • Tôi thêm thủ công các tệp và thư mục cục bộ thực sự hữu ích .gitignore, trong đó có 'biết bạn làm gì khi cài đặt mọi thứ'.

  • Nếu tôi xây dựng một máy ảo mới hoặc cài đặt một PC mới, tôi chỉ cần sao chép ngôi nhà từ xa của mình vào $ HOME và có ngay lập tức mọi thứ tôi cần trong tay.

  • Những thứ như vundle cho plugin vim không còn cần thiết nữa.

Tôi không thích sự phức tạp. Khi tôi tinh chỉnh bất kỳ RCfile nào, tôi chỉ cần làm nó, cam kết và đẩy. Sau đó, như một phản xạ, tôi git kéo $ HOME mỗi ngày và luôn có cấu hình mới nhất. Nó là đơn giản.

Các máy hiện đang theo chế độ này: Máy tính xách tay gia đình, PC làm việc, VM làm việc, cộng với 3 hoặc 4 máy chủ từ xa.


Bạn có bất kỳ kiểm tra git khác được lồng trong nhà của bạn?
Caleb

Không, tôi đặt những thứ khác vào thư mục / công việc và không sao chép các công cụ nhỏ như vim pugins.
gb.

1
Tôi có công việc bên trong ~ / Trang web và cũng thực hiện phương pháp này, không có vấn đề gì với
repit

1
Tôi đã sử dụng thiết lập này trong một thời gian. Tôi có một 'bí danh sq = git status -uno' và không bận tâm nhiều với .gitignore (thường thì tôi thường xem tất cả các hành trình và sau đó nói "meh"). Tôi chưa bao giờ gặp vấn đề với repos git lồng nhau. Tôi có một máy chủ riêng nơi tôi đã thực hiện một thao tác git init --baremà tôi đã chuyển sang ssh (mặc dù tôi không đặt mật khẩu trong repo, nhưng tôi có các tệp ghi chú của mình ở đó).
unhammer

5

Cuối cùng tôi đã thử cả hai và thích cách tiếp cận symlink :

  • Kiểm tra đến bất cứ nơi nào
  • make install
  • Đăng xuất và đăng nhập lại để tải cài đặt X

Nhược điểm:

  • Phải di chuyển tệp vào repo trước khi thêm chúng
  • Phải duy trì danh sách các liên kết tượng trưng trong Makefile

Ưu điểm:

  • Không cần quá nhiều .gitignore(tôi có 133 dotfiles trong ~hộp Ubuntu khiêm tốn của mình)
  • Có thể giữ các tập lệnh bảo trì và các ~công cụ liên quan khác (như Makefilecleanup.sh) tránh xa
  • Phiên bản có thể kiểm soát các cài đặt cá nhân và công cộng một cách riêng biệt

Hạn chế:

  • Không giống như @mrb, tôi chỉ tạo symlink trong ~. Điều đó giữ cho liên kết tượng trưng đơn giản và làm cho việc chú ý các tệp mới chẳng hạn ~/.vim, với chi phí .gitignorebảo trì rất hiếm .

Hai ưu điểm cuối cùng đã vượt qua quy mô trong trường hợp của tôi - Tôi không muốn làm lộn xộn thư mục nhà và tôi muốn giữ riêng tư và nội dung công khai tách biệt rõ ràng.

Ứng dụng duy nhất tôi biết có vấn đề (hoặc ít nhất là có) khi xử lý các liên kết tượng trưng là Pidgin - Nó tiếp tục ghi đè lên các liên kết tượng trưng của tôi bằng các tệp thông thường.


Cảm ơn cho đầu vào của bạn trên pro và nhược điểm của từng phương pháp. Theo dõi tôi đã phát hiện ra một aproach thứ ba có thể làm cho cả hai thế giới trở nên tốt nhất nếu bạn ổn khi thiết lập hệ thống dây điện bổ sung để bắt đầu.
Caleb

3

Đây là một: Nếu bạn cố gắng thực hiện git rebase -i --rootvà bạn đã đăng ký trong .gitconfiglần xác nhận đầu tiên trong kho lưu trữ, git sẽ tạm thời xóa .gitconfigtệp, điều này sẽ khiến nó không thể hoàn thành thao tác rebase vì nó yêu cầu tên và email của bạn phải thực hiện đó, được lưu trữ trong tập tin đó.

Bạn có thể định cấu hình lại chúng một lần nữa và thực hiện git rebase --continue, nhưng sau khi tôi thực hiện xong và hoàn thành thao tác rebase, kho git của tôi đã nhận được một cam kết trống mà không có thông báo cam kết trước cam kết trước đó là cam kết đầu tiên trong kho lưu trữ mà tôi không biết làm thế nào để thoát khỏi

Tôi không biết điều gì xảy ra nếu bạn làm git rebase -i <commit>thay vào đó và .gitconfigđược kiểm tra cùng với bất kỳ cam kết nào sau đó <commit>.

Có lẽ giải pháp đơn giản nhất là kiềm chế không thêm .gitconfigvào kho lưu trữ và thay vào đó liệt kê nó vào .gitignore.


2

Đây là cách tôi làm điều đó:

  1. cài đặt một linux sạch (không cần thiết, nhưng làm cho cuộc sống dễ chịu hơn ở bước 4)
  2. cài đặt
  3. chạy git inittrong nhà của bạn
  4. tạo .gitignore và thêm mọi thứ có vẻ như nó không làm bạn quan tâm hoặc điều đó có thể thay đổi nhiều. Hãy chắc chắn để thêm những thứ như *.cache, *.lockvv Tôi không khuyên bạn nên thêm/*bởi vì bạn sẽ không được thông báo tự động khi một cái gì đó mới được thêm vào nhà của bạn. Đó là cách tiếp cận danh sách đen so với cách tiếp cận danh sách trắng, về cơ bản tôi muốn giữ cấu hình của mình cho tất cả phần mềm ngoại trừ những thứ dễ bay hơi và một số phần mềm tôi không quan tâm. Khi bạn hợp nhất, di chuyển hoặc so sánh các hệ thống, việc có thể tìm khác biệt mọi thứ khá tiện dụng. Bạn có thể thiết lập các hệ thống mới của mình nhanh hơn nhiều so với việc bạn chỉ có .bashrc và một vài dotfiles khác được lưu trữ. Bằng cách này, bạn sẽ giữ cấu hình mà bạn có thể thiết lập thông qua GUI và không biết về các dotfiles nào lưu trữ các cài đặt. (Nếu có bao giờ bạn đã cam kết các tệp dễ bay hơi, bạn vẫn có thể nói với git là không thay đổi)
  5. chạy etckeeper init -d /home/username
  6. chạy git commit -d /home/username
  7. thiết lập bí danh trong trình bao của bạn để làm cho dòng lệnh đẹp hơn, như homekeeper checkout

Lý do sử dụng etckeeper là nó sẽ lưu trữ siêu dữ liệu như quyền cho các tệp của bạn (khá quan trọng đối với một số thứ nhất định như khóa ssh). Bây giờ bạn sẽ có một hook hook trước sẽ tự động lưu siêu dữ liệu. Tôi không chắc chắn về hậu kiểm. Bạn có lẽ nên sử dụng etckeeper checkout xxx -d /home/usertôi sẽ xem xét thêm một chút và giải thích câu trả lời này.


-1

Vấn đề chính của tôi khi sử dụng Git trên thư mục chính là Git không lưu trữ các thuộc tính tệp như quyền tệp và dấu thời gian. Đối với tôi, điều quan trọng là phải biết khi nào một số tệp được tạo, đó có thể là trường hợp của bạn. Hơn nữa, mất quyền đối với các tệp và thư mục như .sshlà có vấn đề. Tôi hiểu rằng bạn có kế hoạch .sshtránh xa Git, nhưng sẽ có những nơi khác mà quyền có thể quan trọng (chẳng hạn như sao lưu trang web không nén).


Điều này là sai lệch nếu không thực sự sai. Git theo mặc định bảo tồn nhiều thuộc tính tệp bao gồm quyền. Tôi đã giữ .sshgit một thời gian mà không có vấn đề gì, quyền bảo mật thích hợp được giữ nguyên. Những gì nó không làm trong cấu hình cơ sở là bảo toàn quyền sở hữu hoặc dấu thời gian; Tuy nhiên, nếu một trong hai điều này là một vấn đề đối với trường hợp sử dụng cụ thể thì có các plugin có thể khiến việc xử lý các thuộc tính bổ sung này trở thành một phần của quy trình công việc thông thường (xem metastore hoặc git-cache-meta).
Caleb

Ngay cả khi nó không lưu trữ chúng, làm thế nào tệ hơn là chỉ có một thư mục chính không có trong vcs? git sẽ không chủ động ghi đè mtimes trừ khi bạn yêu cầu nó thay đổi một tập tin.
poolie

-1

Một giải pháp dựa trên git đặc biệt hữu ích nếu bạn cần triển khai các tệp của mình đến các máy khác nhau và thậm chí còn hơn thế nếu bạn có các bộ phận chung cho tất cả các máy và các bộ phận dành riêng cho một số máy. Bạn có thể tạo nhiều kho lưu trữ và sử dụng một công cụ như multigit hoặc vcsh để sao chép chúng trên cùng một thư mục (thư mục nhà của bạn trong trường hợp này).


Cảm ơn, nhưng có lẽ bạn đã bỏ lỡ câu hỏi. Tôi nhận thức rõ về việc sử dụng cho việc này (vì vậy tại sao tôi muốn làm điều đó ngay từ đầu), câu hỏi này là về bất kỳ cạm bẫy nào mà ai đó mới làm điều này với git (như khi tôi hỏi) có thể không biết . Điều này dường như không trả lời câu hỏi đó cả.
Caleb
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.