2011-10-31 39 views
59

Câu hỏi này có thể là câm, nhưng tôi đã tự hỏi nó một lúc. Đó là về kho git, nhưng tôi cho rằng nó giống nhau đối với các kho lưu trữ cục bộ cho DVCS khác.Di chuyển kho git

phép nói rằng dự án của tôi là như thế này khi nó bắt đầu:

  • Dự án
    • .git
    • tất cả các thư mục khác trong dự án

Vì vậy, đó là cách nó sẽ hoạt động khi bạn thiết lập nó đúng không?

Cho phép nói rằng tôi di chuyển thư mục Dự án ở một nơi khác, tôi có phải thay đổi bất kỳ điều gì không? Hoặc là tất cả các công cụ lưu trữ trong thư mục .git chỉ liên quan đến thư mục Project bỏ qua toàn bộ cây tệp trên Project.

Tôi khá chắc chắn rằng việc di chuyển Dự án sẽ không thành vấn đề nhưng tôi chỉ muốn đảm bảo.

+0

miễn là bạn di chuyển thư mục .git bạn ok –

Trả lời

22

Có, mọi thứ trong .git là tương đối. Nếu bạn đã thêm kho lưu trữ như là một điều khiển từ xa có tên đến một kho lưu trữ khác, bạn sẽ phải thay đổi URL từ xa trong kho lưu trữ khác đó.

+12

Không, điều này là sai. Xem câu trả lời về các mô-đun con dưới đây. – erikkallen

+1

@erikkallen xem nhận xét của tôi về câu trả lời đó giải thích cách tôi không thể xác minh các câu lệnh đó. (Nếu tôi có thể đến đáy của những gì đang diễn ra, tôi sẽ chỉnh sửa câu trả lời tương ứng.) –

6

Không, bạn sẽ không phải thay đổi bất kỳ điều gì khác. Đó là

  • giả sử không có kịch bản thiết lập GIT_DIR, GIT_WORKTREE hoặc GIT_INDEX trực tiếp (không)
  • bạn không có kho bên ngoài trỏ đến bản sao

    • này nếu bạn làm bạn sẽ phải repoint chúng bằng cách sử dụng

      git remote set-url [--push] origin [email protected]:/home/user/newlocation/Project 
      

(nguồn gốc phải là tên của điều khiển từ xa; origin là tên mặc định khi nhân bản từ repo từ xa)

+0

Điều này! Khi bạn chỉ sử dụng 'remote set-url' sẽ không có vấn đề gì với việc thiết lập upstream cho các nhánh nội bộ. –

61

Tôi thấy rằng các mô-đun con không tương đối trong git. Vì vậy, nếu bạn muốn di chuyển một dự án có chứa mô-đun con, bạn phải chỉnh sửa tệp .git trong mô-đun con, cũng như thuộc tính "worktree" trong tệp cấu hình con, được lưu trữ trong tệp .git/modules/MODULENAME/config của cha mẹ .

+3

Tôi cũng phải chỉnh sửa 'MODULENAME/.git' có chứa một cặp khóa-giá trị cho' gitdir' –

+7

Điều này sẽ là câu trả lời được chấp nhận. – erikkallen

+0

Tôi thực sự đã thay đổi các giá trị này thành đường dẫn tương đối, sử dụng ../ .. (tuy nhiên nhiều khi cần) quay trở lại thư mục gốc của dự án. – Uilleann

1

Bạn có thể di chuyển thư mục git từ máy này sang máy khác hoặc nói, bạn muốn di chuyển thư mục dự án của mình.

Tất cả thông tin về nguồn gốc được lưu trữ trong thư mục '.git', được tạo khi bạn khởi tạo kho lưu trữ git dưới một thư mục trên hệ thống của bạn.

Thủ tục

  1. : Di chuyển thư mục dự án đến một vị trí khác.
  2. : Nếu thư mục dự án đang được chuyển sang máy mới, sau đó tạo cặp khóa SSH tương ứng.
  3. : Kể git người bạn đang sử dụng: git config --global user.email "your_git_email_id @ youremail"
8

Hiện hiện từ xa (đây là bước không bắt buộc tất nhiên):

$ git remote show origin 
* remote origin 
URL: [email protected]:project.git 
Remote branch(es) merged with 'git pull' while on branch master 
master 
Tracked remote branches 
master 

Những gì chúng tôi cần làm là xóa nguồn gốc hiện tại và thêm địa chỉ mới:

$ git remote rm origin 
$ git remote add origin [email protected]:project.git 
$ git remote show origin 
* remote origin 
URL: [email protected]:project.git 
Remote branch(es) merged with 'git pull' while on branch master 
master 
error: refs/remotes/origin/HEAD points nowhere! 
New remote branches (next fetch will store in remotes/origin) 
master 

Đừng lo lắng về lỗi được hiển thị bởi lệnh cuối cùng. Lần kéo đầu tiên từ nguồn gốc sẽ khắc phục:

$ git pull 
From [email protected]:project.git 
* [new branch]  master  -> origin/master 
Already up-to-date. 
$ git remote show origin 
* remote origin 
URL: [email protected]:project.git 
Remote branch(es) merged with 'git pull' while on branch master 
master 
Tracked remote branches 
master 

Tôi vẫn còn mới với Git nên có thể đó là cách tốt hơn để làm điều đó nhưng điều này hiệu quả với tôi.

+1

Lời khuyên tuyệt vời. Tuy nhiên, các chi nhánh địa phương không có được thiết lập thượng lưu của họ cho các nhánh theo dõi từ xa của 'origin' mới. Nhưng, có những thông điệp: 'Không có thông tin theo dõi cho nhánh hiện tại. Vui lòng chỉ định nhánh nào bạn muốn hợp nhất với.' và gợi ý: 'Nếu bạn muốn đặt thông tin theo dõi cho chi nhánh này, bạn có thể làm như vậy với: git branch --set-upstream-to = origin/ master' –

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