Pergunta

Eu estou apenas começando com git e eu tenho uma pergunta. Meu aplicativo tem 10 outros desenvolvedores trabalhando nele, cada um com sua própria filial como dev_XXXXX. Então, se eu fizer um clone do repositório, fazer tudo de seu código é copiado para a minha máquina? Nesse caso, eu não quero isso. Suponha que meu ramo é dev_swamy, como eu, em seguida, clone apenas o ramo estável e dev_swamy? Obrigado.

Foi útil?

Solução

Por git clone padrão iria buscar todos os ramos, mas os ramos seria armazenado como ramos-monitoramento remoto: por exemplo ramo 'dev_XXXXX' seria armazenado como 'origem / dev_XXXXX' (com 'refs / remotes / origem / dev_XXXXX' como nome completo). Essas sucursais-monitoramento remoto não seria visível na saída git branch: você precisaria git branch -r a lista filiais remotas de rastreamento (ou git branch -a para listar todos os ramos). Se esses ramos não divergem muito da linha principal, eles não tomariam espaço muito rígido no repositório. Portanto, eu não vejo por que você deseja clonar ramos seleccionados.

No entanto, se você quiser ter um clone com apenas dois ramos selecionados, você pode fazê-lo como este:

  1. Primeiro, crie novo repositório vazio

    $ mkdir repoclone
    $ cd repoclone/
    $ git init
    Initialized empty Git repository in /home/user/repoclone/.git/
    
  2. Em seguida, adicione o repositório com o nome de 'origem' (assim como "clone git" iria nomeá-lo), solicitando o rastreamento de apenas dois ramos: 'master' e 'dev_swamy', usando " git remoto " comando. Verifique se ele foi adicionado corretamente.

    $ git remote add -t master -t dev_swamy origin user@example.com:repo.git
    $ git remote 
    origin
    $ git remote show origin
    * remote origin
      Fetch URL: user@example.com:repo.git
      Push  URL: user@example.com:repo.git
      HEAD branch: master
      Remote branches:
        master          new (next fetch will store in remotes/origin)
        dev_swamy new (next fetch will store in remotes/origin)
    

    Se o ramo estável é chamado de 'estável' ao invés de 'mestre', você teria, naturalmente, para modificar exemplo acima. Também há opção -m <branch> se você quiser ramo especificado para ser ramo padrão no remoto.

  3. Obter de 'origem' (você pode fazer isso também usando a opção -f para "git remoto adicionar" acima):

    $ git fetch
    remote: Counting objects: 282, done.
    remote: Compressing objects: 100% (193/193), done.
    remote: Total 282 (delta 82), reused 0 (delta 0)
    Receiving objects: 100% (282/282), 81.30 KiB | 135 KiB/s, done.
    Resolving deltas: 100% (82/82), done.
    From user@example.com:repo.git
     * [new branch]      master     -> origin/master
     * [new branch]      dev_swamy -> origin/dev_swamy
    From user@example.com:repo.git
     * [new tag]         v1.0       -> v1.0
     * [new tag]         v1.0.1    -> v1.0.1
     * [new tag]         v1.1       -> v1.1
    
  4. Set up filial local 'master' (onde você iria fazer o seu trabalho) a seguir 'origin / master' (ter 'origem / master' como upstream), assim como "git clone" faria:

    $ git checkout -t origin/master
    Branch master set up to track remote branch master from origin.
    Already on 'master'
    

    Você pode repetir isso para branch 'dev_swamy'.

  5. Agora você pode ver como aparência arquivo de configuração semelhante. Você pode obter exatamente o mesmo resultado, editando o arquivo .git/config para se parecer com o seguinte e, em seguida, fazer "git fetch" .

    $ cat .git/config  # or just open this file in your editor
    [core]
            repositoryformatversion = 0
            filemode = true
            bare = false
            logallrefupdates = true
    [remote "origin"]
            url = user@example.com:repo.git
            fetch = +refs/heads/master:refs/remotes/origin/master
            fetch = +refs/heads/dev_swamy:refs/remotes/origin/dev_swamy
    [branch "master"]
            remote = origin
            merge = refs/heads/master
    

Não se esqueça de se apresentar para Git antes de iniciar o trabalho no repositório (ou seja, definir 'user.name' e 'user.email' configuração variáveis, geralmente no arquivo de configuração por usuário)!

Outras dicas

Se você clonar, todas as revisões em todos os ramos são clonados junto, mas o repositório clonado irá verificar mestre por padrão.

Apenas levando ramos selecionados é mais complicado desde git realmente não acho que você deveria trabalhar dessa maneira. Você tem que puxar para baixo os ramos manualmente:

mkdir repoclone
cd repoclone
git init
git remote add origin git://remote/url
git fetch origin master:master
git fetch origin dev_XXX:dev_XXX

Acima é o que eu sabia que trabalhou. No entanto, se você quiser configurar um repositório git que funciona como normal, só tem uma visão mais estreita de suas filiais remotas? Você pode fazer isso muito facilmente:

mkdir repoclone
cd repoclone
git init
git remote add origin git://remote/url

# now open .git/config for editing in your editor
# replace the following line (grab all remote branches)
fetch = +refs/heads/*:refs/remotes/origin/*

# replace with lines listing exactly which branches you want
fetch = +refs/heads/master:refs/remotes/origin/master
fetch = +refs/heads/dev_XXX:refs/remotes/origin/dev_XXX

# save the file, now run

git fetch

Outra maneira de fazer isso é para evitar um clone direto, mas em vez de adicionar manualmente um controle remoto com um conjunto personalizado de buscar refspecs.

por exemplo.

mkdir myclone
cd myclone
git init

git remote add origin url://origin.repo

# Add fetch rules for the branches that we want to track
git config remote.origin.fetch +refs/heads/master:+refs/remotes/origin/master
git config --add remote.origin.fetch +refs/heads/dev_swamy:+refs/remotes/origin/dev_swamy

# fetch now fetches just what we need, subsequently it will do incremental fetches
git fetch

# Creating local branches tracking the remote branches
git checkout -b master origin/master
git branch dev_swamy origin/dev/swamy

Eu acho que a questão mais importante aqui é que os outros vão estar empurrando, não o que você vai ser a clonagem ou puxar. Uma vez que cada desenvolvedor está trabalhando em seu próprio ramo, outra questão é como você acabar com uma base de código comum. São os desenvolvedores fusão seus ramos de dominar? E são eles, em seguida, empurrando seu branch master alterado para um repositório central? Se for esse o caso, não há nenhuma maneira para você puxar ramos outros dos desenvolvedores de qualquer maneira.

Se isso não for o caso, eu não consigo ver como você pode formar uma equipe funcionando.

E como eu pensamento final:? Eu seria curioso para saber por que você não gostaria de clonar ramos outros dos desenvolvedores para o seu repositório

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top