2015-11-18 22 views
5

Tôi đang cố gắng dọn sạch kho lưu trữ git của mình vàGit: Theo dõi địa phương, thêm chi nhánh mới?

  1. Tạo nhánh mới phản chiếu nhánh sản xuất (chính) của tôi.
  2. Xóa mọi nhánh không cần thiết, từ xa hoặc cục bộ.
  3. Làm cho chi nhánh địa phương theo dõi chi nhánh của tôi (idk nếu tôi cần làm điều này, lợi ích?)
  4. Có nhánh cho mỗi giai đoạn công việc của tôi, tức là một chi nhánh cho địa phương & dev (dev), 1 chi nhánh để dàn dựng (dàn dựng) và 1 chi nhánh để sản xuất (sản xuất). Local và dev có thể chia sẻ cùng một nhánh làm việc, nhưng các nhánh riêng biệt cho dàn dựng và sản xuất.

Từ dòng lệnh, bạn có thể thấy môi trường của mình.

$ git remote 
dev 
origin 
production 
staging 

$ git branch -r 
dev/dev 
origin/HEAD -> origin/master 
origin/dev 
origin/master 
production/master 
wpengine-findcra/master 

$ git branch -vv 
dev     xxxxxxx <comment> 
*master    xxxxxxx [origin/master] <comment> 
production/staging xxxxxxx [remotes/production/master] <comment> 
staging/master  xxxxxxx <comment> 

Tôi có 4 vị trí tôi làm việc. Mã chảy từ 1 đến 4.

  1. máy địa phương của tôi
  2. máy chủ phát triển
  3. dàn máy chủ
  4. máy chủ sản xuất

Tôi muốn thêm một chi nhánh mới đặc biệt cho dàn máy chủ, và ngay bây giờ tôi muốn nó phản chiếu nhánh sản xuất (master). Nhưng tôi gặp phải lỗi này lỗi và tôi không biết phải làm gì.

$ git checkout master 
$ git branch staging 
error: there are still refs under 'refs/heads/staging' 
fatal: Failed to lock ref for update: Is a directory 

Mã của tôi được cập nhật theo gốc/chủ và dev/dev.

+0

Câu trả lời này có phần làm cho tinh thần, nhưng câu hỏi ban đầu là đối phó với "cú hích" và tôi không thể nhìn thấy làm thế nào để áp dụng nó với tình huống của tôi. http://stackoverflow.com/questions/11245897/push-to-remote-repo-gives-the-error-there-are-still-refs-under?answertab=active#tab-top – italiansoda

Trả lời

7

Nếu bạn có một chi nhánh có tên có dấu gạch chéo, git sẽ tạo (trong .git/refs/heads) một thư mục có tên giống tên của chi nhánh của bạn cho đến dấu gạch chéo. Trong thư mục đó, nó sẽ đặt các ref cho chính nhánh đó. Vì vậy, thư mục .git/refs/heads/staging/ tồn tại và chứa tệp "chính" do chi nhánh của bạn staging/master.

Khi bạn cố gắng tạo nhánh "dàn dựng", git sẽ cố gắng tạo tệp .git/refs/heads/staging. Vì điều này đã tồn tại nhưng là một thư mục, điều này sẽ thất bại. Vì vậy, bạn không thể có hai chi nhánh với những tên này trong kho lưu trữ của bạn.

Trong nhiều phiên bản gần đây của git được thông báo lỗi sẽ trông như thế này:

fatal: cannot lock ref 'refs/heads/staging': 'refs/heads/staging/master' exists; cannot create 'refs/heads/staging' 
+0

Cảm ơn, điều này đã chỉ cho tôi Đúng hướng! Tôi đã kết thúc việc xóa một nhánh/tổng thể nhánh nội bộ và tạo một nhánh phân nhánh mới/dàn dựng từ xa được liên kết với máy chủ dàn dựng của tôi. Tôi cũng đã đẩy nó vào máy chủ gốc của mình tại nguồn gốc/dàn dựng hay còn gọi là github. Tôi đã xóa dàn dựng/master, nhưng đã có thể kiểm tra origin/master và phân nhánh nó thành dàn dựng/dàn dựng mới vì tôi đã ở cùng một cơ sở mã. – italiansoda

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