2009-06-27 39 views
12

Tôi thường cần phát triển nội dung trên đường, không có kết nối internet/mạng. Tôi chỉ là một nhà phát triển duy nhất, vì vậy cho đến bây giờ tôi chỉ đơn giản là có một kho SVN trên máy tính của tôi và đã thực hiện thanh toán trên máy tính xách tay của tôi khi tôi đi. Vấn đề: Điều đó không cho phép tôi kiểm soát nguồn trên đường.thiết lập git cho một nhà phát triển duy nhất?

Vì vậy, tôi đã thử thay đổi thành git, điều này dường như làm những gì tôi muốn, nhưng tôi không chắc mình hiểu đúng cách nó được sử dụng trong thiết lập của tôi.

Về cơ bản:

  • tạo một kho lưu trữ trên \ myserver \ share \ dự án sử dụng git init
  • nhân bản vô tính rằng kho để máy 1 sử dụng git clone
  • nhân bản vô tính rằng kho để máy 2 sử dụng git clone
  • Làm việc trên máy 2, sử dụng git commit để thực hiện bất kỳ thay đổi nào đối với kho lưu trữ cục bộ của tôi
  • F inally sử dụng git push để đẩy tất cả thay đổi trở lại \ myserver \ share \ prohect
  • Dùng git pull trên máy tính 1 để có được những thay đổi mới nhất từ ​​\ myserver \ share \ dự án

đó làm việc, nhưng lệnh git push mang lại cho tôi một cảnh báo nói rằng việc đẩy nhánh kiểm tra ra không được hỗ trợ vì nó có thể gây nhầm lẫn cho chỉ mục. Bây giờ, tôi bối rối, bởi vì thông điệp cũng được viết bằng một giọng nghiêm túc, có nghĩa là tôi nên tôn trọng nó (và thực sự, gitk cho thấy bây giờ tôi có hai nhánh: master và remotes/origin/master), nhưng tôi chưa hiểu đầy đủ về thuật ngữ.

Điều gì sẽ là các bước chính xác trong trường hợp của tôi?

  • Tôi sẽ chỉ bao giờ làm việc trên máy tính 1 HOẶC máy 2, không bao giờ trên cả
  • tôi dự định sẽ sử dụng phân nhánh như một cách để có một chi nhánh riêng biệt cho sửa lỗi/kiểm tra (giống như theo cách thông thường), nhưng không phải là cách để có nhiều nhà phát triển
  • Tôi thực sự muốn sử dụng nó làm phương án thay thế cho rsync SVN của mình.

Chỉnh sửa: Có hai số lẻ. Điều đầu tiên là nếu tôi chỉ đơn giản là thay đổi một tập tin, nó nói "Thay đổi nhưng không được cập nhật". đó là lạ:

# On branch master 
# Changed but not updated: 
# (use "git add <file>..." to update what will be committed) 
# (use "git checkout -- <file>..." to discard changes in working directory) 
# 
#  modified: myproject/Readme.txt 
# 
no changes added to commit (use "git add" and/or "git commit -a") 

Thông điệp thứ hai là một trong đó tôi nghĩ là thủ phạm, đầu ra của git push:

warning: You did not specify any refspecs to push, and the current remote 
warning: has not configured any push refspecs. The default action in this 
warning: case is to push all matching refspecs, that is, all branches 
warning: that exist both locally and remotely will be updated. This may 
warning: not necessarily be what you want to happen. 
warning: 
warning: You can specify what action you want to take in this case, and 
warning: avoid seeing this message again, by configuring 'push.default' to: 
warning: 'nothing' : Do not push anything 
warning: 'matching' : Push all matching branches (default) 
warning: 'tracking' : Push the current branch to whatever it is tracking 
warning: 'current' : Push the current branch 
Counting objects: 7, done. 
Delta compression using up to 4 threads. 
Compressing objects: 100% (4/4), done. 
Writing objects: 100% (4/4), 333 bytes, done. 
Total 4 (delta 3), reused 0 (delta 0) 
Unpacking objects: 100% (4/4), done. 
warning: updating the current branch 
warning: Updating the currently checked out branch may cause confusion, 
warning: as the index and work tree do not reflect changes that are in HEAD. 
warning: As a result, you may see the changes you just pushed into it 
warning: reverted when you run 'git diff' over there, and you may want 
warning: to run 'git reset --hard' before starting to work to recover. 
warning: 
warning: You can set 'receive.denyCurrentBranch' configuration variable to 
warning: 'refuse' in the remote repository to forbid pushing into its 
warning: current branch. 
warning: To allow pushing into the current branch, you can set it to 'ignore'; 
warning: but this is not recommended unless you arranged to update its work 
warning: tree to match what you pushed in some other way. 
warning: 
warning: To squelch this message, you can set it to 'warn'. 
warning: 
warning: Note that the default will change in a future version of git 
warning: to refuse updating the current branch unless you have the 
warning: configuration variable set to either 'ignore' or 'warn'. 
To file:///\\myserver\share\project 
    129649b..1f4b957 master -> master 

Vì vậy, nó nói với tôi rằng "đẩy vào chi nhánh hiện tại" là không được đề nghị, nhưng tôi không thực sự có được cách thích hợp để làm điều này là gì.

+0

Tôi đang sử dụng git để giải quyết cùng một vấn đề. Tôi không có cùng một vấn đề, nhưng tôi đã tiếp cận nó một chút khác biệt. Tôi đang sử dụng một máy chủ Linux ở nhà như là một kho trung tâm, sau đó tất cả các địa điểm dev của tôi là bản sao của trung tâm. Bạn có thể sao chép thông báo lỗi chính xác không? Nó có thể giúp tôi trả lời câu hỏi của bạn tốt hơn. –

+0

Điều đó đã giúp ích. Bạn có một vài câu trả lời hay từ những người khác, mà tôi đang upvoting. –

Trả lời

10

Nếu không thì có vẻ tốt, nhưng để tránh thông báo lỗi, bạn có thể thiết lập kho lưu trữ "ngược dòng" dưới dạng kho lưu trữ trống, nghĩa là kho không bao gồm bản sao đã kiểm tra.Bạn làm điều này với

git --bare init 

Xem e.g. this example

+1

Cảm ơn bạn đã liên kết, chứa đựng những gì tôi muốn! "Ma thuật" là lần đầu tiên tạo ra một kho lưu trữ địa phương và sau đó đẩy nó vào một kho lưu trữ - trên máy chủ, và không phải là cách khác vòng. –

+0

URL đến ví dụ bị hỏng. Liên kết Wayback Machine: http://web.archive.org/web/20100211165958/http://toolmantim.com/articles/setting_up_a_new_remote_git_repository –

8

Lệnh git push đòi hỏi bạn phải chỉ định một refspec, nếu không bạn sẽ phải chỉnh sửa .git/config để xác định hành động mặc định trong trường hợp không có refspecs được chỉ định. Ví dụ, hãy xem xét kịch bản mà bạn có chi nhánh có tên là master.

Đối đẩy chi nhánh master, bạn sẽ:

git push refs/heads/master:refs/heads/master 
git push master:master 
git push master 

Tất cả những điều trên là như nhau. Refspec trông giống như một đường dẫn là cách rõ ràng nhất để chỉ định một refspec. Bằng cách đó, bạn có thể chắc chắn rằng bạn đang đề cập đến chi nhánh có tên master thay vì thẻ có tên master.

Nếu không, bạn có thể chỉnh sửa .git/config và thêm:.

[push] 
    default = matching 

này sẽ cho phép bạn chỉ git push, và Git sẽ đẩy đến chi nhánh từ xa của các chi nhánh địa phương đang cư trú trong Ví dụ, nếu bạn hiện đang ở chi nhánh master, git push sẽ đẩy chi nhánh chính cục bộ đến nhánh chính từ xa.

Như đã được tuyên bố bởi janneb, bạn sẽ phải sử dụng một kho lưu trữ trống để không cần cảnh báo. Vấn đề với việc đẩy tới một kho lưu trữ bình thường (không phải là trần) là, chủ sở hữu chính (của kho lưu trữ `bình thường 'cụ thể) sẽ không muốn thay đổi thêm vào kho lưu trữ của mình. Vào thời điểm đó, nếu ai đó đẩy vào kho lưu trữ này và xóa một chi nhánh (hoặc bất kỳ thay đổi nào khác), chủ sở hữu sẽ không có dự kiến ​​thay đổi như vậy. Vì vậy, cảnh báo.

0

Bạn dường như có câu trả lời tốt cho câu hỏi chính của bạn, vì vậy tôi sẽ giải quyết vấn đề này:

... nếu tôi chỉ cần thay đổi một tập tin, nó nói "Thay đổi nhưng không cập nhật". đó là lạ ...

Git, không giống như mọi hệ thống kiểm soát phiên bản khác bao giờ, đòi hỏi hành động sử dụng rõ ràng bao gồm tập tin sửa đổi trong tập hợp các điều cần được cam kết tiếp theo. Bạn phải nói

$ git add <your modified files> 

sau chỉnh sửa chúng và trước làm git commit. Tôi có ấn tượng rằng điều này là để làm cho nó dễ dàng hơn để chọn lọc cam kết chỉ một số sửa đổi của bạn.

Nếu bạn thực hiện "git add" và sau đó sửa đổi các tệp, bạn phải thực hiện "git add" một lần nữa hoặc nó sẽ chỉ cam kết các thay đổi cho đến điểm "git add" đầu tiên.

Có lối tắt, git commit -a, điều này thực hiện nhiều hay ít những hoạt động "cam kết" khác của VCS. Tôi nói "nhiều hơn hoặc ít hơn" bởi vì tôi không tự tin nó là một trận đấu chính xác trong mọi trường hợp. Sự phân kỳ duy nhất mà tôi biết là, một số phiên bản cũ hơn của git sẽ thêm tất cả các tệp đã sửa đổi của bạn tất cả các tệp mới của bạn rồi cam kết; điều này đã được sửa chữa trong phiên bản hiện tại, nhưng tôi vẫn không tin tưởng chính xác điều này.

+0

Tôi sắp bỏ phiếu, nhưng sau đó tôi đọc điểm cuối cùng của bạn về -a. Nó sẽ chỉ thêm các tệp đã sửa đổi, chứ không phải các tệp mới (chưa được sửa). – Douglas

+0

Chắc chắn là địa ngục đã thêm các tệp mới vào lần cuối cùng tôi thử: --P – zwol

+0

Perforce cũng yêu cầu hành động người dùng rõ ràng để bao gồm các tệp đã sửa đổi trong tập hợp những điều cần cam kết tiếp theo. – Arafangion

Các vấn đề liên quan