pengembangan-web-mp-pd.com

Perilaku default "git Push" tanpa cabang yang ditentukan

Saya menggunakan perintah berikut untuk Push ke cabang jarak jauh saya:

git Push Origin sandbox

Jika saya katakan

git Push Origin

apakah itu Dorong perubahan di cabang saya yang lain juga, atau apakah itu hanya memperbarui cabang saya saat ini? Saya memiliki tiga cabang: master, production dan sandbox.

Dokumentasi git Push tidak begitu jelas tentang ini, jadi saya ingin memperjelas ini untuk selamanya.

Cabang dan remote mana yang benar-benar memperbarui perintah git Push berikut?

git Push 
git Push Origin

Origin di atas adalah remote.

Saya mengerti bahwa git Push [remote] [branch] hanya akan mendorong cabang itu ke remote.

1294
PlagueHammer

Anda dapat mengontrol perilaku default dengan mengatur Push.default di konfigurasi git Anda. Dari dokumentasi git-config (1) :

Push.default

Menentukan tindakan git Push harus dilakukan jika tidak ada refspec diberikan pada baris perintah, tidak ada refspec yang dikonfigurasi di remote, dan tidak ada refspec yang tersirat oleh opsi yang diberikan pada baris perintah. Nilai yang mungkin adalah:

  • nothing: jangan dorong apa pun

  • matching: Dorong semua cabang yang cocok

    Semua cabang dengan nama yang sama di kedua ujungnya dianggap cocok.

    Ini dulunya adalah default, tetapi tidak sejak Git 2.0 (simple adalah default baru).

  • upstream: Dorong cabang saat ini ke cabang hulu (tracking adalah sinonim yang tidak digunakan lagi untuk upstream)

  • current: Dorong cabang saat ini ke cabang dengan nama yang sama

  • simple: (baru di Git 1.7.11) seperti upstream, tetapi menolak untuk Push jika nama cabang upstream berbeda dari yang lokal

    Ini adalah opsi paling aman dan cocok untuk pemula.

    Mode ini telah menjadi default di Git 2.0.

Mode sederhana, saat ini dan hulu adalah untuk mereka yang ingin mendorong keluar satu cabang setelah menyelesaikan pekerjaan, bahkan ketika cabang lainnya belum siap untuk didorong keluar

Contoh baris perintah:

Untuk melihat konfigurasi saat ini:

git config --global Push.default

Untuk mengatur konfigurasi baru:

git config --global Push.default current
1514
Brian L

Anda dapat mengatur perilaku default untuk git Anda dengan Push.default

git config Push.default current

atau jika Anda memiliki banyak repositori dan menginginkan hal yang sama untuk semua itu

git config --global Push.default current

saat ini dalam pengaturan ini berarti secara default Anda akan hanya mendorong cabang saat ini ketika Anda melakukan git Push

Pilihan lain adalah:

  • tidak ada: Jangan Dorong apa pun
  • cocok: Tekan semua cabang yang cocok (default)
  • pelacakan: Dorong cabang saat ini ke apa pun yang dilacak
  • saat ini: Dorong cabang saat ini

PEMBARUAN - CARA BARU UNTUK MELAKUKAN INI

Pada Git 1.7.11 lakukan hal berikut:

git config --global Push.default simple

Ini adalah pengaturan baru yang diperkenalkan yang bekerja dengan cara yang sama seperti saat ini, dan akan dibuat default untuk git dari v 2.0 menurut rumor

197
Christoffer

git Push Origin akan Mendorong semua perubahan pada cabang lokal yang memiliki cabang remote yang cocok di Origin Adapun git Push

Bekerja seperti git Push <remote>, di mana <remote> adalah remote cabang saat ini (atau Asal, jika tidak ada remote dikonfigurasi untuk cabang saat ini).

Dari bagian Contoh halaman manual git-Push

197
baudtack

Saya baru saja melakukan kode saya ke cabang dan mendorongnya ke github, seperti ini:

git branch SimonLowMemoryExperiments
git checkout SimonLowMemoryExperiments
git add .
git commit -a -m "Lots of experimentation with identifying the memory problems"
git Push Origin SimonLowMemoryExperiments
54
neoneye

Berikut ini adalah informasi yang sangat berguna dan bermanfaat tentang Git Push : Git Push: Just the Tip

Penggunaan git Push yang paling umum adalah untuk Mendorong perubahan lokal Anda ke repositori hulu publik Anda. Dengan asumsi bahwa hulu adalah remote bernama "Asal" (nama remote default jika repositori Anda adalah klon) dan cabang yang akan diperbarui ke/dari bernama "master" (nama cabang default), ini dilakukan dengan: git Push Origin master

git Push Origin akan Mendorong perubahan dari semua cabang lokal ke cabang yang cocok dengan remote Origin.

git Push Origin master akan Mendorong perubahan dari cabang master lokal ke cabang master jarak jauh.

git Push Origin master:staging akan mendorong perubahan dari cabang master lokal ke cabang pementasan jarak jauh jika ada.

24

(Maret 2012)
Hati-hati: bahwa kebijakan "matching" default mungkin akan segera berubah
(kadang-kadang setelah git1.7.10 +)
:

Lihat " Tolong diskusikan: apa yang harus" git Push "lakukan ketika Anda tidak mengatakan apa yang harus ditekan? "

Dalam pengaturan saat ini (mis.Push.default=matching),git Push tanpa argumen akan mendorong semua cabang yang ada secara lokal dan jarak jauh dengan nama yang sama .
Ini biasanya tepat ketika pengembang mendorong ke repositori publiknya sendiri, tetapi mungkin membingungkan jika tidak berbahaya saat menggunakan repositori bersama.

Proposal adalah untuk ubah default ke 'upstream' , mis. Dorong hanya cabang saat ini, dan Dorong ke cabut cabang yang akan ditarik.
Kandidat lain adalah 'current'; ini hanya mendorong cabang saat ini ke cabang jarak jauh dengan nama yang sama.

Apa yang telah dibahas sejauh ini dapat dilihat di utas ini:

http://thread.gmane.org/gmane.comp.version-control.git/192547/focus=192694

Diskusi relevan sebelumnya meliputi:

Untuk bergabung dalam diskusi, kirim pesan Anda ke: [email protected]

19
VonC

Saya hanya meletakkan ini di bagian alias .gitconfig saya dan menyukai cara kerjanya:

pub = "!f() { git Push -u ${1:-Origin} `git symbolic-ref HEAD`; }; f"

Akan Dorong cabang saat ini ke Asal dengan git pub atau repo lain dengan git pub repo-name. Lezat.

17
Mat Schaffer

Git Push akan mencoba dan Dorong semua cabang lokal ke server jauh, ini mungkin yang tidak Anda inginkan. Saya memiliki beberapa pengaturan kenyamanan untuk menangani ini:

Alias ​​"gpull" dan "gpush" dengan tepat:

Di ~/.bash_profile saya

get_git_branch() {
  echo `git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'`
}
alias gpull='git pull Origin `get_git_branch`'
alias gpush='git Push Origin `get_git_branch`'

Dengan demikian, mengeksekusi "gpush" atau "gpull" hanya akan mendorong cabang "sedang aktif" saya.

8
Cody Caughlan

Anda dapat mendorong cabang saat ini dengan perintah

git Push Origin HEAD

(ambil dari sini )

8
Andriy F.

Anda dapat mengubah perilaku default itu di .gitconfig , misalnya:

[Push]
  default = current

Untuk memeriksa pengaturan saat ini, jalankan:

git config --global --get Push.default
7
kenorb

Daripada menggunakan alias, saya lebih suka membuat skrip git-XXX sehingga saya dapat sumber mengontrolnya lebih mudah (pengembang kami semua memiliki dir sumber tertentu yang dikendalikan pada jalur mereka untuk jenis hal ini).

Skrip ini (disebut git-setpush) akan menetapkan nilai konfigurasi untuk nilai remote.Origin.Push menjadi sesuatu yang hanya akan mendorong cabang saat ini:

#!/bin/bash -eu

CURRENT_BRANCH=$(git branch | grep '^\*' | cut -d" " -f2)
NEW_Push_REF=HEAD:refs/for/$CURRENT_BRANCH

echo "setting remote.Origin.Push to $NEW_Push_REF"
git config remote.Origin.Push $NEW_Push_REF

perhatikan, karena kami menggunakan Gerrit , ia menetapkan target menjadi refs/for/XXX untuk mendorong ke cabang ulasan. Ini juga mengasumsikan Origin adalah nama jarak jauh Anda.

Aktifkan setelah memeriksa cabang dengan

git checkout your-branch
git setpush

Jelas bisa diadaptasi untuk juga melakukan checkout, tapi saya suka skrip untuk melakukan satu hal dan melakukannya dengan baik

3
Mark Fisher

Saya telah menambahkan fungsi-fungsi berikut ke file .bashrc saya untuk mengotomatiskan tugas-tugas ini. Itu git Push/git pull + nama cabang saat ini.

function gpush()
{
  if [[ "x$1" == "x-h" ]]; then
    cat <<EOF
Usage: gpush
git: for current branch: Push changes to remote branch;
EOF
  else
    set -x
    local bname=`git rev-parse --abbrev-ref --symbolic-full-name @{u} | sed -e "s#/# #"`
    git Push ${bname}
    set +x
  fi
}

function gpull()
{
  if [[ "x$1" == "x-h" ]]; then
    cat <<EOF
Usage: gpull
git: for current branch: pull changes from
EOF
  else
    set -x
    local bname=`git rev-parse --abbrev-ref --symbolic-full-name @{u} | sed -e "s#/# #"`
    git pull ${bname}
    set +x
  fi
}
2
MichaelMoser