2013-03-30 40 views
14

Tôi đã chia đôi một repo từ Github. Trên làm git remote -v nó sẽ hiển thị:Git không hiển thị tất cả các chi nhánh trên địa phương

origin https://github.com/myusername/moodle.git (fetch) 
origin https://github.com/myusername/moodle.git (push) 
upstream https://github.com/moodle/moodle.git (fetch) 
upstream https://github.com/moodle/moodle.git (push) 

Các moodle.git có khoảng 10 chi nhánh, nhưng repo chỉ 2 trong số đó cho thấy. Trên làm git branch -a (hiển thị tất cả các chi nhánh) tôi nhận được:

MOODLE_24_STABLE// just these two on local..how? 
* master// 
    origin/MOODLE_13_STABLE 
    origin/MOODLE_14_STABLE 
    origin/MOODLE_15_STABLE 
    origin/MOODLE_16_STABLE 
    origin/MOODLE_17_STABLE 
    origin/MOODLE_18_STABLE 
    origin/MOODLE_19_STABLE 
    origin/MOODLE_20_STABLE 
    origin/MOODLE_21_STABLE 
    origin/MOODLE_22_STABLE 
    origin/MOODLE_23_STABLE 
    origin/MOODLE_24_STABLE 
    origin/master 
    upstream/MOODLE_13_STABLE 
    upstream/MOODLE_14_STABLE 
    upstream/MOODLE_15_STABLE 
    upstream/MOODLE_16_STABLE 
    upstream/MOODLE_17_STABLE 
    upstream/MOODLE_18_STABLE 
    upstream/MOODLE_19_STABLE 
    upstream/MOODLE_20_STABLE 
    upstream/MOODLE_21_STABLE 
    upstream/MOODLE_22_STABLE 
    upstream/MOODLE_23_STABLE 
    upstream/MOODLE_24_STABLE 
    upstream/master 

Làm thế nào để giải quyết vấn đề của tôi mà không cần bất kỳ sự mất mát dữ liệu hoặc bất thường?

+3

Tại sao bạn mong chờ chi nhánh địa phương hơn? Sau khi nhân bản một kho lưu trữ, chỉ có một nhánh chính cục bộ. Các chi nhánh khác được tạo theo yêu cầu. – knittl

+0

@knittl: Được rồi. Tôi không biết điều đó. Bạn vui lòng hướng dẫn tôi làm thế nào để làm điều đó? Tôi đã tạo một nhánh nói 'git checkout -b STABLE_23_STABLE' nhưng các tệp không phải là nhánh của nhánh đó. – xan

+1

'git checkout -b MOODLE_23_STABLE' tạo một nhánh mới của cam kết hiện tại, vì vậy bạn sẽ vẫn thấy các cam kết tương tự.Hoặc là 'git checkout -b MOODLE_23_STABLE ngược dòng/MOODLE_23_STABLE' hoặc' git checkout MOODLE_23_STABLE' (cú pháp viết tắt/DWIM) – knittl

Trả lời

16

Nhân bản một repo sẽ không sao chép tất cả các nhánh từ xa trên repo cục bộ: đối với một repo từ xa lớn với nhiều nhánh, sẽ gây ô nhiễm không gian tên cục bộ của bạn với tấn nhánh.

Tôi có một one-liner command để tạo các chi nhánh địa phương theo dõi tất cả các nhánh từ xa của một repo từ xa, nhưng điều này thường không cần thiết.
Bạn chỉ tạo một chi nhánh địa phương theo dõi một nhánh ở xa khi cần.

git checkout -b aBranch --track origin/aBranch 

# or, shorter: 
$ git checkout --track origin/aBranch 
Branch aBranch set up to track remote branch refs/remotes/origin/aBranch. 
Switched to a new branch "aBranch" 

# even shorter at the end of this answer. 

Thêm một --track cho phép thiết lập cấu hình để đánh dấu các chi nhánh khởi điểm là "upstream" từ chi nhánh mới.
Cấu hình này sẽ cho biết git hiển thị mối quan hệ giữa hai nhánh trong git statusgit branch -v.
Hơn nữa, nó chỉ đạo git kéo mà không có đối số để kéo từ thượng nguồn khi chi nhánh mới được kiểm tra.


kostix đề cập rằng --track được ngụ ý khi forking một nhánh chi nhánh từ xa (trừ khi branch.autosetupmerge được thiết lập để false)

Đây có thể là đủ

git checkout aBranch 

Lời giải thích chính xác từ git checkout man page là :

Nếu <branch> không được tìm thấy nhưng có tồn tại một chi nhánh theo dõi trong đúng một từ xa (gọi nó là <remote>) với một tên phù hợp, điều trị như tương đương với:

$ git checkout -b <branch> --track <remote>/<branch 
+0

'--track' được ngụ ý khi chuyển nhánh nhánh ra khỏi nhánh từ xa (trừ khi' branch.autosetupmerge' không được đặt thành 'false'). Tôi cũng sẽ tư vấn cho @xan, dành thời gian của họ và đọc một số [tài liệu giới thiệu về các ngành từ xa] (http://git-scm.com/book/en/Git-Branching-Remote-Branches) để không bị lạc đường sau này. – kostix

+0

@kostix điểm tốt. Tôi đã thêm độ chính xác đó vào câu trả lời để hiển thị nhiều hơn. – VonC

+1

'git checkout --track origin/aBranch' giải quyết vấn đề này cho tôi, cảm ơn –

2

Một số lần, nếu bạn havn't kéo mã mới nhất, bạn sẽ không được phép thanh toán chi nhánh mới được tạo. Bởi vì các thay đổi của bạn không được đồng bộ hóa.

Vì vậy, đầu tiên -pull các -checkout mới nhất từ ​​chi nhánh mới được tạo ra

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