I just started a new job, which is trying to start using Git for version control. I am trying to help them with the process but it is turning out to be more complicated than anticipated.
Currently, all new files are uploaded to the dev server via SSH FTP as follows:
SSH into first machine, then SSH from here into the actual Dev server.
Ideally, we'd like to be able to be able to enter "git push dev" and have git skip through both SSH to push the files to the Dev server... However, I'm not sure how to add a sequence of origins to Git...
Does anyone know if this is possible, or how one might go about doing this?
Thanks in advance.
Related
I discovered an OSS project I've contributed to had moved to github. I installed hg-git and cloned a local repo from the git:// URL; then I made changes.
I then realized I really wanted my own github fork, so I made one; but I haven't been able to figure out quite how to switch my existing local repo. I've changed the local repo settings to use the git:// URL of my fork, and it can pull; but I can't push my changes up. It tells me to use the https:// URL, but when I make that change, I can neither pull nor push -- I get an error 406, "not acceptable."
The work done in the local repo is minimal, so I can redo it, but it'd be simpler if the local repo and my fork could just connect now.
UPDATE
I've installed Github for Windows so I could manage the SSH key. It generated a key (github_rsa) and attached it to my Github account.
I edited the hgrc file and added a [ui]ssh= setting pointing to the local git 'ssh' command (buried down in %APPDATA%\Local\Github).
With this, if I go into a "git-shell" window, which I guess spawns ssh-agent, then I can enter commands such as "hg incoming" and the connection is made. So I've got the remote repo URL right, and within the git-shell ecosystem, I've got the SSH keys set up right.
From a regular CMD.EXE window, the same command yields "Permission denied (publickey)". From TortoiseHg, the same error appears when I try an "incoming" action. I'd prefer to keep using TortoiseHg, but I'm not sure how to get it to use SSH.
FINAL UPDATE
For some reason, TortoisePlink doesn't want to play with github's SSH server, at least not with the Github-for-Windows-generated key. So I still have Github for Windows installed (not necessarily a bad thing, but superfluous to what I wanted to do).
To get hg and TortoiseHg to connect, I had to modify my project settings:
[ui]
ssh = %USERPROFILE%\AppData\Local\GitHub\<salt>\bin\ssh -i %USERPROFILE%\.ssh\github_rsa
That is: point to the SSH command, installed with portable GitHub, and specify the github-generated key on the command line. With this configuration, I don't need ssh-agent to be running.
You need to push via ssh, meaning you need to push via:
hg push git+ssh://git#github.com/<login>/<repo>
Note the usage of git# instead of your login in the first part of the URL. This actually matters; the server will figure out your credentials via the supplied SSH key.
You may also have to add your ssh key to your GitHub account first (per step 4 of this page).
This assumes that you created a fork of the original GitHub repository via the GitHub UI; pushing to an empty repository with hg-git may require additional steps.
I am currently facing a little problem with git when pushing to my remote server.
Everything works fine on local server, it commit successfully and so do push to my remote repo. Git show master and git show remote-repo/master show the commits modifications done so everything should normally work.
Still when accessing my website nothing has changed. The files simply haven't changed. The remote repo is a bare one, my app is built with Flask, Gunicorn and I use supervisor to manage it. I tried to change git remote path to a new directory created with copy of my files in it, restart supervisor and gunicorn, restart my server, but nothing changed. What is strange is that first push worked. I'd net on a problem of directory structure or oath, still everything is the same. Except that my files are stores in one more directory than local. But i tried to copy files in the upper directory and it did not change anything.
I am kinda lost now and would be grateful for decades for any help or clues about this problem.
Thanks !!
Still a little confused on your set up. You develop on local and push to a server. Does the server have the bare repo or does the server hosting the website have the bare repo?
When you push to a bare that doesn't mean the working tree has changed since bare is just a bare repo- no working tree. If this is the case you have to follow these steps:
1. push from local to server that contains bare
2. pull from the remote bare location from the production server
(the one that contains the website)
3. restart apache or whatever you have
Hope this helps. Please let me know if I am on the right track.
Ok so i've got it working finally ! To do so i init another --bare repo and created a folder for website files. Then, in the bare repo, add to /hooks folder a post-receive SH/script file to check-out files when push received from bare directory to the one for website files. I edited supervisor conf and nginx one, reloaded and restarted all. it's okay now !
So I have my local computer - where I've updated my (html/js/css) code, github (where I've pushed the updated code already by doing a git add + git commit + git push origin master) and then the server of the actual website which the code is for.
I've connected to the server via the command line terminal. I've already previously cloned the code to the server (by running the command git clone [REPO URL]) while logged in to the server via SSH, so the (un-updated-)files are there.
But now that I've updated the code, and pushed that update to github, how do I now update or push the repo/code/updated-github-code to the server???
I'm currently looking at the terminal with
[~]#
^ showing. I tried to git clone [REPO URL] again, but then I get the msg:
fatal: destination path 'name of my file' already exists and is not an empty directory
Am I missing or overlooking a step? Well obviously I am but I could use some help please. Like I said I'm trying to update the code to the server so the actual website will reflect the changes I made to the code and so everything is in sync (local code, code pushed to github and hopefully/eventually the code on the server/website).
I am just learning this obviously, so go easy on me (I've spent almost the entire day learning to connect to the server via SSH in terminal)...
Also, feel free to correct my terminology...
Pull from github while ssh'd into the server using the link from the github repo "copy to clipboard" button on the web interface. If that doesn't work you could try wiping the repos folder on the server and cloning from scratch. But use that option with caution if downtime is unacceptable for this particular web app.
I'm new to Mercurial and version control, and although I'm only working on personal PHP application projects (until I hopefully get a job soon) I'm well overdue learning how it all works.
I've been reading about Mercurial all day, but I'm still confused on a few elements...
Firstly, I understand Mercurial CAN push my files straight to my live server, but I don't see many tutorials or examples explaining how this is done, so it leads me to think it's not used often? I currently use FTP to upload my files, and it's error prone to know which files have been modified, so I'd like to eliminate this obviously.
I also see services like BitBucket being mentioned a lot, but if I'm pushing to BitBucket how do I then get my files to my live server? Can I get only the changed files to upload via FTP, or do I need to install Mercurial on my server too or something?
Apologies if this is a basic question, I'm just a little lost as to how companies would/should use this service, and how files and uploads are handled elegantly. How should i go about version control on a personal project?
There are many ways to do that, but I'll try to narrow it down to the basic steps involved in a scenario using BitBucket:
1) Install Mercurial on both your dev machine and your live server.
2) Create a repository in BitBucket.
3) Clone the repository to your dev machine using the URL that appears in BitBucket, e.g.:
hg clone https://your_user#bitbucket.org/your_account/your_repos .
4) Clone the repository to your live server in the same way.
5) Do your dev and commit your code to the local repository on your dev machine (using hg commit). Then push the changesets to BitBucket using hg push.
6) Once you're ready to deploy the changes to your live server, log in to your live server and run hg pull -u.
I just use rsync to upload everything. If you're working by yourself, it's simple and works fine.
I set up an SSL certificate, and then made a bash shortcut ,p (target directory):
,p() { rsync -avz --delete ./ "user#server.com:/var/www/html/$#/"; }
Then, on my local host I can type ,p images and the current directory will be uploaded to mysite/images.
If you're always uploading to the same place, you can make a shortcut with no argument:
alias ,pm="rsync -avz --delete ./ "user#server.com:/var/www/html/";
Finally, if you just want to type the command:
rsync -avz --delete ./ "user#server.com:/var/www/html/
I have a codebase on a remote Linux server (in my private home directory). I am traveling and my internet connection is spotty, so I'd like to download the code locally, work on it, and then push changes to the server. Since I'm already managing the codebase with Bazaar, seems like that's the logical tool to use for this task as well. I downloaded Bazaar for Windows, and tried creating a branch, but can't figure out what location to enter in the "From" field. My first guess was to do it the way I do with scp, where I enter:
username#host.com/subfolder-with-code
But that didn't work. Also, where do I enter my password?
I think you just needed to add the protocol to that your url:
bzr branch bzr+ssh://username#host.com/subfolder-with-code
should do the trick.
See bzr help urlspec for more info.