Git Workflow: Difference between revisions

From Littledamien Wiki
Jump to navigation Jump to search
Line 3: Line 3:


==Creating a new repo out of an existing site==
==Creating a new repo out of an existing site==
===Creating the Git repos===
* Navigate to the site's root directory.
* Navigate to the site's root directory.
* Create a Git repository.
* Create a Git repository.
Line 8: Line 9:
$ git init
$ git init
</syntaxhighlight>
</syntaxhighlight>
* Make a .gitignore file (images, wordpress install files, etc.)
* Make a .gitignore file (images, wordpress install files, etc.)
* Set username and email (necessary for each repo)
* Set username and email (necessary for each repo)
Line 14: Line 16:
$ git config --global user.email "dbarchowsky@gmail.com"
$ git config --global user.email "dbarchowsky@gmail.com"
</syntaxhighlight>
</syntaxhighlight>
* Add existing files to Git repo, confirm the list of files, and commit the changes.
* Add existing files to Git repo, confirm the list of files, and commit the changes.
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
Line 20: Line 23:
$ git commit -m "Initial version"
$ git commit -m "Initial version"
</syntaxhighlight>
</syntaxhighlight>
* Clone the repo to 'origin'
* Clone the repo to 'origin'
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
$ cd /n/git/base_dir
$ cd /n/git/base_dir
$ git clone /m/base_dir/repo_dir
$ git clone /m/base_dir/repo_dir
</syntaxhighlight>
===Configure SSH to allow Git to push to the production server with non-standard port number===
* [http://stackoverflow.com/questions/1558719/using-a-remote-repository-with-non-standard-port Stackoverflow: Using a remote repository with non-standard port]
* Edit <code>.ssh/config</code>
<syntaxhighlight lang="text">
Host sitealias
HostName domainname.com
Port 12345
User siteuser
</syntaxhighlight>
* then you should be able to use the basic syntax:
<syntaxhighlight lang="text">
git push sitealias:/path/to/public_html master
</syntaxhighlight>
===Deploy a project using Git push===
'''Note:''' this is not available with shared hosting. Changes must be uploaded with FTP. Refer to  [http://community.namecheap.com/forums/viewtopic.php?f=7&t=4275 this thread on the NameCheap forums].
[http://stackoverflow.com/questions/279169/deploy-a-project-using-git-push Stackoverflow: Deploy a project using Git push]
1. Copy over your <code>.git</code> directory to your web server
: Make sure to disallow access to any files within the <code>.git</code> directory!
: Put an <code>.htaccess</code> file in the <code>.git</code> directory with
:<syntaxhighlight lang="text">
deny from all
</syntaxhighlight>
2. On your local copy, modify your .git/config file and add your web server as a remote:
<syntaxhighlight lang="text">
[remote "production"]
    url = username@webserver:/path/to/htdocs/.git
</syntaxhighlight>
3. On the server, replace .git/hooks/post-update with [http://littled.dbarchowsky.com/wiki/upload/post-update this file]
4. Add execute access to the file (again, on the server):
<syntaxhighlight lang="bash">
chmod +x .git/hooks/post-update
</syntaxhighlight>
5. Now, just locally push to your web server and it should automatically update the working copy:
<syntaxhighlight lang="bash">
git push production
</syntaxhighlight>
</syntaxhighlight>



Revision as of 00:19, 12 May 2012

Overview

Git Server set up on dbarchowsky.com.

Creating a new repo out of an existing site

Creating the Git repos

  • Navigate to the site's root directory.
  • Create a Git repository.
$ git init
  • Make a .gitignore file (images, wordpress install files, etc.)
  • Set username and email (necessary for each repo)
$ git config --global user.name "Damien Barchowsky"
$ git config --global user.email "dbarchowsky@gmail.com"
  • Add existing files to Git repo, confirm the list of files, and commit the changes.
$ git add .
$ git status -s
$ git commit -m "Initial version"
  • Clone the repo to 'origin'
$ cd /n/git/base_dir
$ git clone /m/base_dir/repo_dir

Configure SSH to allow Git to push to the production server with non-standard port number

Host sitealias
HostName domainname.com
Port 12345
User siteuser
  • then you should be able to use the basic syntax:
git push sitealias:/path/to/public_html master

Deploy a project using Git push

Note: this is not available with shared hosting. Changes must be uploaded with FTP. Refer to this thread on the NameCheap forums.

Stackoverflow: Deploy a project using Git push

1. Copy over your .git directory to your web server

Make sure to disallow access to any files within the .git directory!
Put an .htaccess file in the .git directory with
deny from all

2. On your local copy, modify your .git/config file and add your web server as a remote:

[remote "production"]
    url = username@webserver:/path/to/htdocs/.git

3. On the server, replace .git/hooks/post-update with this file

4. Add execute access to the file (again, on the server):

chmod +x .git/hooks/post-update

5. Now, just locally push to your web server and it should automatically update the working copy:

git push production

Working with existing projects

  • Make sure the 'dev' drive is available on the current client. See Configuration

Using 'Git Bash' navigate to the project directory.

$ cd /m/littledamien/littledamien_web
  • To see a list of previous commits (which should include the branch names as part of the commit message):
$ git log --oneline
  • Make a new Git branch
$ git co -b mynewbranch
  • Edit as necessary. Then verify changed files with
$ git status -s
  • Add edits to commit with
$ git add filename.ext
  • Revert files with
$ git co HEAD filename.ext
  • Verify edits with
$ git diff --cached
$ git diff --cached filename.ext
  • Commit the edits ('tm0001' being the branch name used to track projects)
# commit all edits
$ git commit -m "tm0001: commit message"

# switch to master branch
$ git co master

# merge edits into master branch
$ git merge tm0001

# clean up branch
$ git branch -d tm0001
  • Then move the commits to the main repo:
$ cd /n/git/littledamien/littledamien_web
$ git pull /m/littledamien/littledamien_web
$ # or 
$ git push ssh://[uname]@[domain].com:[port]/refs/littledamien/littledamien_web 
$ # or 
$ git push ssh://[uname]@[domain].com:[port]/refs/littledamien/littledamien_web master

Configuration

  • Make sure the 'dev' drive is available while working with Git Bash on the current client.
subst m: "\\littledamienii\develop"
subst n: "\\littledamienii\shared"
  • Physical origin repos located beneath d:\shared\git
  • To make a new project:
d:
cd \shared\git
git clone ..\..\develop\path\to\project_root
cd .\path\to\project_root
git init 
rem <<< is that last 'git init' step necessary ??? >>>
  • At least for now, when fetching & pulling vial ssh, the root directory is the Git install directory (C:\Git).
  • A symbolic link has been created between C:\Git directory and the Git base directory (D:\shared\git)
cd \Git
mklink /d "refs" "d:\shared\git"
rem symbolic link created for refs <<===>> d:\shared\git
  • The symbolic link allows access to the git repo via
git clone|push|pull|etc. ssh://username@server/refs/path/to/myrepo