Back in the bad old days (like 2 weeks ago) there was exactly one way to create patches and exactly one way to apply them. Now we have so many formats and so many ways to work it can be mind boggling. As a community, we're going to have to come to a consensus on which of these many options we prefer. I'm going to take a quick look at the options and how to work among them when necessary.

Ways to create patches

My preference when making changes is always to commit my changes whether or not the commits will be exposed later. That lets me keep track of what I'm doing, and make commit comments about my work. So in each if these cases we'll start with a feature branch based on origin/7.x-1.x with:

# Create a feature branch by branching from 7.x-1.x
git checkout -b my_feature_99999 origin/7.x-1.x
[edit A.txt]
git add .
git commit -m "Added A.txt"
[edit B.txt]
git add .
git commit -m "Added B.txt"

First, I may want to know what commits and changes I'm going to be including in this patch.

  • git log origin/7.x-1.x..HEAD shows me the commits that I've added.
  • git diff origin/7.x-1.x shows me the actual code changes I've done.

Now we can create a patch representing these changes in at least a couple of ways:

  • git diff origin/7.x-1.x >~/tmp/hypothetical.my_feature_99999_01.patch will create a patchfile which can be uploaded to Drupal.org.
  • git format-patch --stdout origin/7.x-1.x >~/tmp/hypothetical.my_feature_99999_01.patch will create a patchfile that includes sophisticated commit information allowing a maintainer to just apply the patch and fly - the commits you've created will automatically be applied (more later). Note that this type of patch has the email you used with git config user.email embedded in the patch, so if you post it on Drupal.org, it will be indexed by Google.

What do we do with the feature branch? Whatever. It's sitting there and can be used any number of ways in the future, or you can delete it. I tend to clean these up periodically, but not right away. git branch -D my_feature_99999 would delete this branch.

Ways to apply patches

I usually create a feature branch to apply and work with patches. This lets me make edits after the fact and have complete freedom. I don't have to keep track of what I've committed until I'm done. So in this case let's assume that I'm the maintainer and have received the patch created above.

Before we start, please
git config --global push.default tracking
which will allow a tracking branch to automatically push to its remote.

git checkout -b received_patch_99999/03 origin/7.x-1.x

This creates a named local branch which can push to the 7.x-1.x branch on the server.

There are at least three ways to apply patches:

  • patch -p1 < /path/to/patchfile.patch or patch -p1 -i /path/to/patchfile.patch will apply the differences. I typically commit the patch immediately, like:
      git status
      git add *.txt
      git commit -m "Patch from user99 to fix 99999 comment 3"
     

    I can then continue to work on this, but now I can differentiate my own edits from the original patch that was provided. I might made additional commits. As a maintainer, I can then rebase/squash and commit a nicely-formatted single commit at the end. (See below.)
  • git apply /path/to/patchfile.patch does exactly the same thing as patch -p1 so you can use the exact same workflow.
  • git am /path/to/patchfile.patch only works with patches created using git format-patch that contain commit information. But when you use it, it actually makes the exact commits (with the associated commit messages) that the original patcher made. You can then continue to make changes yourself, make additional commits, and then rebase/squash and commit a nicely formatted version of the patch (see below).

I could now push the commits with
git push  # If you have push.default set
OR
git push origin HEAD:7.x-1.x

Squashing, rebasing, and editing the commit message

Let's say that this patch works, we've committed whatever edits we want, and it's time to go ahead and fix it up and push it. Now we can rebase/squash it, fix up the commit message, and push the result.

Some things to know here: Although you may have heard that "rebasing is bad" it's not true. Rebasing commits that have already been made public and that might affect someone else is in fact bad. But here we have not done that. We are just using Git's greatest features to prepare a clean, single commit. It will not break anything, it will not rewrite anybody else's history.

Let's squash our all of our work into a single commit that has a good message: "Issue #99999 by user999: Added A.txt and B.txt"

# Make sure our local branch is up-to-date
git pull --rebase
# Now rebase against the branch we are working against.
git rebase -i origin/7.x-1.x

We'll have an editor session pop up with a rebase script specified, something like this:
    pick a5c1399 added A
    pick d3f45f7 Added B
  
    # Rebase c98c91a..d3f45f7 onto c98c91a
    #
    # Commands:
    #  p, pick = use commit
    #  r, reword = use commit, but edit the commit message
    #  e, edit = use commit, but stop for amending
    #  s, squash = use commit, but meld into previous commit
    #  f, fixup = like "squash", but discard this commit's log message
    #
    # If you remove a line here THAT COMMIT WILL BE LOST.
    # However, if you remove everything, the rebase will be aborted.
    #

To squash, all we have to do here is change the second and following commands of this little script from "pick" to "s" or "squash". Leave the top one as 'pick' and everything will be squashed into it. I'll change mine like this:
pick a5c1399 added A
s d3f45f7 Added B

and save the file and exit.

Then you get the chance to edit the commit message for the entire squashed commit. An editor session pops up with:
  # This is a combination of 2 commits.
  # The first commit's message is:
 
  added A
 
  # This is the 2nd commit message:
 
  Added B
 
  # Please enter the commit message for your changes. Lines starting
  # with '#' will be ignored, and an empty message aborts the commit.
  # Not currently on any branch.
  # Changes to be committed:
  #   (use "git reset HEAD <file>..." to unstage)
  #
  # new file:   A.txt
  # new file:   B.txt

At this point, everything in the commit message that starts with '#' will be a comment. You can just edit this file to have the commit that you want. I'll delete all the lines and put

Issue #99999 by user999: Added A.txt and B.txt

Now I can just
git push  # If push.default is set to tracking
OR
git push origin HEAD:7.x-1.x

Note: A maintainer who never gets lost in what they're doing and always finishes things sequentially doesn't absolutely need to create a new branch for all this. Instead of creating a branch with git checkout -b received_patch_99999/03 origin/7.x-1.x we could have done all this on a 7.x-1.x tracking branch. The only complexity is that we have to figure out what commit to rebase to, which we can figure out with git log

git checkout 7.x-1.x
git pull
git am /path/to/patchfile.patch
git rebase -i origin/7.x-1.x
git push

Rebasing to prepare a nicer single-commit patch

OK, so let's assume that the maintainers of this project ask for better-prepared patches because they don't care to rebase and never edit a commit, but rather just apply them. The patch contributor can do the exact same squashing process before creating the patch.

Above, when creating doing work to create a new patch, I did this:
  # Create a feature branch by branching from 7.x-1.x
  git checkout -b my_feature_99999 origin/7.x-1.x
  [edit A.txt]
  git add .
  git commit -m "Added A.txt"
  [edit B.txt]
  git add .
  git commit -m "Added B.txt"

There were two commits on my feature branch, and they have my typical, lousy, work-in-progress commit messages that I wouldn't want any maintainer to have to deal with. So I'll rebase/squash them into a single commit before creating my patch.

git rebase -i origin/7.x-1.x

Then I get the same exact options that the maintainer had in the section above, and follow the exact same procedure to consolidate them, and give a good commit message. Then,

git format-patch --stdout origin/7.x-1.x >~/tmp/hypothetical.my_feature_99999_01.patch

will make a very nice single-commit patch with a good message that the maintainers can use out of the box if they'd like to.

Summary

We have lots of options in creating and applying patches, but the git format-patch + git am + git rebase -i toolset is remarkably powerful, and we may be able to build a community consensus around this toolset.

Rebasing sounds hard and odd, and squashing really awful, but they're essentially the same thing as patching. In reality, they bring the patch workflow into the 21st gitury. One patch == one commit. Sure you can do lots of obscure things with them, but here we're just combining and cleaning up commits.

And yes, you've been warned not to rewrite publicly exposed history using rebase, but we're not doing that. We're preparing something to be made public so it's completely harmless.

 

As a module or theme maintainer or contributor, you may be making commits to a Drupal Git repository on a regular basis, both for your own code and changes contributed by others. Appropriate comments along with those commit messages are the key to providing context that others need to understand the development of your code.

Important: Do NOT begin your commit message with the # symbol. While this was a best practice with CVS, it will cause Git to remove the commit message entirely in certain situations (e.g. git rebase -i).

Quick summary for the impatient

Use this syntax for commit messages:

Issue #[issue number] by [comma-separated usernames]: [Short summary of the change].

For example:

Issue #52287 by sun, Dries: Fixed outdated commit message standards.

Note the punctuation.

Longer version

Give details

Provide at least a short summary of what is contained in the commit. Most often, the issue title can be re-used. Otherwise, try to summarize the change.

Usually, commit messages start with the (past tense) verb

  • Added (new feature)
  • Fixed (bug fix)
  • Changed (task)
  • Updated (task, due to changes in third-party code)

It may not be trivial to phrase a summary starting with one of those verbs. But if used consistently, you will get used to it. When not using these verbs, make sure you prefix the commit message with the issue category.

Either way allows users of your module to determine whether a new release contains only bug fixes or maybe also new features and other stuff that may require testing on an existing production site.

The following hint might help you in writing comprehensive summaries:

Try to keep the commit message to something like the title of the issue or a single sentence describing what was fixed. Do not to describe what was really wrong, just say what was fixed.

Reference the drupal.org issue, if available

A common practice is to create a project issue for every change in a module/project. If the change you are committing relates to an issue on drupal.org, give the issue number, preceded by a number/pound/hash sign (#). This convention is interpreted by the commit log on drupal.org to provide a link back to the issue.

Give credit

If others have contributed to the change you are committing, take the time to give them credit. Each commit message should contain at least one contributor name, even if it refers to yourself. Once a project has more than one maintainer, or is taken over by a new maintainer, it's very valuable to know who actually wrote or contributed a certain change.

To do this, append by [username]: to the issue number. Separate multiple contributors with commas.

Issue #123456 by dww, Dries: Added project release tracking.

If you are just committing a patch created by others, do not credit yourself.

If a very very large list of people contributed to a change, pick the major contributors and add et al to represent the rest:

Issue #123456 by dww, pwolanin, et al: Added project release tracking.

Listing 5-6 people individually is fine, though.

If a change/commit does not relate to an issue for any reason, you should skip the issue number, but still give credit:

by sun: Updated README.txt.

Always refer to usernames from drupal.org and not the contributors' Git account names.

(Optional) Re-use commit messages in CHANGELOG.txt

Each project should include a CHANGELOG.txt, which lists the major changes to the code in the project. Some projects choose to list even minor changes.

One way to create the CHANGELOG.txt file is to copy and paste commit messages to your changelog prior to committing a change (see formatting above). This gives you a nice output for project release nodes. (Or you could bypass this completely by using the git-release-notes Drush extension -- example output.)

Note that if you do copy/paste commit messages into CHANGELOG.txt for every commit, it does make it more difficult to do git "cherry-picking" (i.e., to apply only selected patches to a new branch), and more difficult to port patches to other branches. But if you do want to follow this practice:

  1. Apply a patch.
  2. Add a change log entry to CHANGELOG.txt. Notes:
    • Change logs are reverse chronological, new entries at the top.
    • All lines in CHANGELOG.txt should wrap at 80 chars. If an entry exceeds 80 chars, subsequent lines belonging to the same entry should be indented by 2 spaces.
    • Leave out the "Issue" commit message prefix in the changelog.
  3. Copy the changelog entry and re-use for the Git commit message (but remove linefeeds and indents of long lines).
  4. Prepend the "Issue " prefix.
  5. Commit.

Normally, changelog entries/changes shouldn't be contained in patches you create and submit to a project. Let the project maintainer add CHANGELOG entries.

Prior to creating a new release, you should update the CHANGELOG.txt and insert a new release heading:

--- CHANGELOG.txt 3 Nov 2008 23:18:02 -0000 1.4.2.14
+++ CHANGELOG.txt 29 Nov 2008 15:42:53 -0000
@@ -6,6 +6,10 @@ Journal x.x-x.x, xxxx-xx-xx

Journal 6.x-1.x, xxxx-xx-xx
---------------------------
+
+
+Journal 6.x-1.3, 2008-11-29
+---------------------------
#322731 by sun: Fixed improper use of t() in module install file.

Examples

A sample commit message:

Issue #46746 by Matt: Fixed inconsistent encoding of path aliases.

Longer messages are possible, but commonly not used, since the drupal.org issue already contains detailed information and is automatically linked in the release notes if you are following this guide.

Extended commit message, including non-technical explanation:

Issue #46746 by Matt: Fixed inconsistent encoding of path aliases.

Fixes broken URLs on profile pages.

Longer, and more descriptive, for larger issues:

Issue #[issue number] by [username]: [Short summary of the change].

A bug in [filename(s)] caused [short description of the problem]. This commit
solves this by:
* [first solution or change]
* [second solution or change]
* [third solution or change]
* Adding $foo as parameter to the API call module_function() in bar.

[Optional short note on the effects for code calling your APIs or functions, or users using your modules.]

For other examples, have a look at commit messages as available on http://drupal.org/commitlog. Note, however, that you'll also see non-conforming commit messages there.

Almost all improvements to other peoples' projects come in the form of a self-contained set of changes, e.g., a bug fix against a particular module or include file, improvements to existing code, and so on. The exact changes are captured in a patch file — a simple text format that shows lines added and removed.

This page describes an advanced workflow that can help maintainers give you credit in the repository log by creating and uploading a patch containing instructions for one single commit to a project hosted on Drupal.org. For the general high-level overview of patching with git, see Making a patch with Git.

Prerequisite: Every workflow requires the initial set up detailed in Using Git on Drupal.org.

Obtain or update a copy of the project

  1. Clone the project to obtain a copy of it that you can work with locally. You only need to do this once per project.
    git clone --branch [version] http://git.drupal.org/project/[project_name].git
  2. If you didn't just clone for the first time, pull the latest changes down to ensure you're working on the latest code.
    git checkout [version]
    git pull

Creating patches via topic branch

  1. Create and checkout a local "topic branch" for the issue you're working on. (If the issue appears at http://drupal.org/node/123456 then the issue number is 123456.)
    git branch [issue-number]-[short-description] # e.g. 123456-example-bug
    git checkout [issue-number]-[short-description]

    Or in a single line:

    git checkout -b [issue-number]-[short-description] # e.g. 123456-example-bug
  2. Make whatever changes are necessary to see your issue fixed.
    # Edit file in your favorite editor:
    <your_editor_here> [filename]

    # After making your edits and saving the file, confirm your changes are present:
    git status

    # Make more edits in other files and save theme:
    <your_editor_here> [other-filename]

    # Confirm changes again:
    git status

  3. When you are satisfied, make one single commit with all your changes using the -a option.
    # Commit the changes to your topic branch
    git commit -a -m "Issue #123456: Fixed all instances of foo bug."

    See the Drupal.org documentation on commit messages for more details on commit message standards.

  4. When your code is ready to show people, grab the latest code once more.
    git fetch origin
  5. Make your code apply to the latest version of the code
    git rebase origin/[version] #e.g. [version] could be 7.x-2.x
  6. Now, create your patch file. Two methods of creating patches are as follows:
    1. The most generic (and fool-proof) way is to create a diff relative to the branch you just used for the rebase:
      git diff origin/[version] > [project_name]-[short-description]-[issue-number]-[comment-number].patch
    2. In the case where you have followed the instructions above and have just one SINGLE commit on your local topic branch you can use the git format-patch command to make a patch that will include your author information.
      git format-patch origin/[version] --stdout >  [project_name]-[short-description]-[issue-number]-[comment-number].patch
  7. Upload your patch to the Drupal.org issue attached to a new comment; remember to change the issue status to "needs review", to flag the issue for reviewers.

Patch naming conventions explained

The (unofficial) patch naming convention that has emerged from the community is:

[project_name]-[short-description]-[issue-number]-[comment-number].patch
[project_name]
refer's to the project's name as it appears in the URL of the project page on Drupal.org, i.e. http://drupal.org/project/[project_name], or from the git remote repository location, i.e. http://git.drupal.org/project/[project_name].git
[short-description]
is an 1-2 word summary about what the patch does with dashes between the words.
[issue-number]
appears in the URL of the issue on Drupal.org; For example, if the issue you're working on is at http://drupal.org/node/9876543, the issue number is 9876543.
[comment-number]
is the comment on the aforementioned issue that caused another patch file to be needed or the one that inspired the patch. If there is no comment causing the patch to be submitted then none is required for the filename or you can use a comment-number of 0 (zero) to indicate the original issue. If you're fixing, changing or improving upon a previously provided patch in a way that has not yet been documented in a previous comment, you may wish to guess at the comment number you're about to post by adding 1 to the last comment number on the issue; please note that this last option is an imperfect method that may not work as intended on active issues with many people commenting. In this case, the best advise is to redact your comment offline, and refresh the page just before you paste in your comment text and attach the patch.

Hypothetical example

A patch for a spelling error on the contributed module "my_module" and a suggested fix in comment #12 of issue #9876543 might look like: my_module-spelling-9876543-12.patch.

Footnotes

  • Do not use a hash sign (a.k.a. pound sign) "#" in your patch file's name as it does not work.
  • In general, automated testing of your patches on Drupal.org by the friendly testbot is a Good Thing. However, adding -DX at the end of the patch name will cause the testbot to skip testing of the patch. For example, my_module-spelling-9876543-13-D7.patch will be ignored.
  • The best practice recommendation is to use Git, however patches may be created with many tools. The minimum requirement for uploading patches to Drupal.org is that you must be able to apply the patch with patch -p1 or git apply.
  • Before creating a patch that spans many commits, users should use git rebase -i to squash their several commits into one if it's only one logical commit.
  • Following the nomenclature documented here, a Drupal core patch might look like: drupal-proper-title-987654321-23.patch. Please note that while some people opt to leave off the [project_name] from core patches, adding "drupal-" to the front helps distinguish core patches from others, and is therefore still recommended for consistency, clarity, and simplifying the instructions.
  • When you remove or move files in the repo using git rm or git mv, git diff creates a verbose output. Use git's format-patch command with the -C and -M options will move the file, instead of removing and adding the lines. The patch size becomes much smaller as a result of this.

    git format-patch -C -M [version] --stdout > [patch-name].patch

  • If you use git format-patch to create patches and you post them to Drupal.org, then the email and name you have configured in user.email and user.name will be widely indexed on the Internet, as Google picks up all our patches. If you don't want this, you may want to consider using the alternate git diff <main_branch> >/tmp/my_module.my_issue.patch method for creating patches.
  • When you add new files to the repository with git add, avoid use of the -N option, which causes any resulting patches to try to apply against a non-existent file.
  • Since patch files themselves should never be added to a project, you may wish to tell Git to ignore them globally by adding the line *.patch to a ~/.gitignore file, followed by the command: git config --global core.excludesfile ~/.gitignore. You can also use this for other types of files that Git should always ignored, like text editor backup files. For more information, see: gitignore Manual Page.

This page outlines a workflow for testing patches and code improvements, including how to download, apply, test, and improve upon patches on your local development environment that have been uploaded by others to Drupal.org's issue queues, using a Git workflow and local "topic branches".

Note: If you're unfamiliar with patching Drupal, please read the Getting Involved section on Patches.

There are also less-technical instructions in the Beginner's guides on How to Apply Patches, as well as non-Git focused instructions for applying patches on Windows and Mac OS.

Setup: preparing the local project environment

  1. There are two ways you might go about setting things up, depending on if you've already obtained the project or not.
    • Clone the project to get a copy you can work with locally (you only need to do this once per project).
      git clone --branch [version] http://git.drupal.org/project/[project_name].git
    • Alternatively, if you're working on a project that you've already obtained, pull the latest changes down to ensure you're working on the latest code.
      git pull

      Optionally, switch to the version (aka, branch) to which you'll be applying the patch. This is not necessary if you checked out the code with git clone specifying the --branch option, as in the example above, but is needed if you typically work between multiple branches.

      # List all the versions
      git branch -a

      # Switch to the branch (version)
      git checkout [version]  #  e.g. version might be 7.x-2.x

  2. Create a local "topic branch" for the issue you're working on.
    git checkout -b [issue-number]-[short-description] # e.g. 123456-some-bug

Configuration: Obtaining and applying a patch file

  1. Download the patch and apply the code changes in the patch to your working directory. The following commands assume you're already in the project's root directory. If not, you need to cd ~/path/to/[project-name] first.
    • Use `curl` to download the file, then use git to apply the patch:
      curl -O http://drupal.org/files/issues/[patch-name].patch
      git apply [patch-name].patch

      Or in a single line:

      curl http://drupal.org/files/issues/[patch-name].patch | git apply -
    • Alternatively, use `wget` to download the file, then use git to apply the patch:
      wget http://drupal.org/files/issues/[patch-name].patch
      git apply [patch-name].patch

      Or in a single line:

      wget -q -O - http://drupal.org/files/issues/[patch-name].patch | git apply -

Test & Report the results

  • If the patch does not apply, you may either copy the patch error message into a comment in the issue queue, or attempt to "re-roll" the patch by hand, which may require applying the patch manually.

    If the patch command executes without any complaints, examine the code changes in your working directory, to confirm the changes.

    git diff
  • Now test the changes, to see if you can break them. Leave a detailed review of what you tried in the issue. If you can confirm the patch does it's job as advertised, leave a comment to that effect and change the status to "reviewed and tested by the community". On the other hand, if the patch breaks something or does not fix the original issue adequately, change the issue status to "needs work", and explain what still needs fixing.
  • Alternatively, (ideally?) fix what is broken about the patch, or make your own improvements, by editing the code and files, then create a single-commit patch of your own and upload it in a comment on the issue, changing the issue status to "needs review". Note: Your patch should be made against the [version] of code that is to be patched, not against the patch you downloaded.

When you're done: Code cleanup

  • This workflow provides a methodology to organize each issue into its own "topic branch". If you're working on various issues within a given project, Git will let you see a list of your local topic branches at any time.
    git branch
  • Once you no longer need or plan to work on a feature, delete your topic branches.
    git branch -D [branch-name]

Footnotes

  • You can also apply patches with patch -p1 and git am. git am is also useful if the patches were created by git format-patch.
  • Some older patches may require patch -p0 or git apply -p0 to apply correctly, but patches made with git should all be -p1 compatible.
  • Since the patch files themselves should not ever be added to the project, you may wish to tell Git to ignore them by adding the line *.patch to the .git/info/exclude file in the project, or to a global ~/.gitignore file.

 

This page documents a high-level overview of the current best practice recommendations for contributing change requests, in the form of a patch file, to projects (e.g., modules, themes, Drupal core, etc) hosted on Drupal.org using Git. For a more advanced workflow with Git, please refer to the Advanced patch contributor guide.

Note 1: If you're unfamiliar with patching Drupal, please read the Getting Involved section on Patches.

Note 2: If you choose to create patches with a tool other than Git, be sure to produce a -p1 patch; the old -p0 format was phased out in 2011

General patch guidelines

Keeping things organized

To help reviewers understand the scope of changes, separate each change type into its own patch. For example, bug fixes, performance enhancements, code style fixes, and whitespace fixes all should be in different patches. Each separate change type (and patch) should be associated with a different issue in the queue on Drupal.org.

Line endings and directory separators

Note for Windows users: Use Unix line endings (LF) and directory separators (/). Many text editors can convert line endings, or you can pipe diff output through dos2unix.

The basic approach

This basic patch workflow is appropriate for many situations, but if you're doing more than a quick fix, adding or deleting files, or collaborating with others, see the advanced patch contributor guide.

Creating a patch

Be sure you have checked out the branch you wish to patch with the following command.

git branch

Ensure it is up-to-date with the following:

git pull origin [branchname]

Make your changes. Then if, for example, the issue appears on Drupal.org at http://drupal.org/node/707484, using issue-number 707484:

git diff > [project_name]-[short-description]-[issue-number]-[comment-number].patch

[project_name] refer's to the project's name as it appears in the URL, i.e. http://drupal.org/project/[project_name], or from the git remote repository location, i.e. http://git.drupal.org/project/[project_name].git

If you added new files with your patch, then:

git add [path.to.new.file]
git diff --staged > [project_name]-[short-description]-[issue-number]-[comment-number].patch

Applying a patch

Download the patch to the root of your working directory. Apply the patch with the following command. The -v flag makes the output verbose so you can see the patch apply successfully.

git apply -v [patch-name.patch]

To avoid accidentally including the patch file in future commits, remove it:

rm  [patch-name.patch]

When you're done: Reverting uncommited changes

Revert changes to a specific file:

git checkout [filename]

Revert changes to the whole working tree:

git reset --hard

 

Ventajas:

Cuando tienes unas buenas habilidades sociales.

1- Comprendes mejor a los demás.
2- Te comprendes mejor a vos mismo.
3- Te comunicas mejor con los demás.
4- Tienes más amigos y los conoces mejor.
5- Es más fácil participar en actividades divertidas.
6- Puedes jugar un papel más importante en tu familia y participar más de las decisiones familiares.
7- Puedes tener mejores rendimientos escolares, menos problemas con los amigos o compañeros y una mejor adaptación posterior en la vida.
8- Puedes caer mejor a los maestros y compañeros de clase.
9- Puedes ser más popular, caer mejor y ser una persona más feliz.

Desventajas: 
Cuando tienes pocas habilidades sociales.

1- Puede que no seas capaz de comunicar muy bien tus necesidades o sentimientos a los demás.
2- Puede resultarte más difícil hacer nuevos amigos y conservar los que ya tienes.
3- A los demás les costará comprenderte.
4- Te apartarás de las cosas importantes o divertidas que suceden a tu alrededor.
5- Puede que estés más tiempo sólo, que pierdas amigos y que tengas problemas con los adultos.

 

Download and install DBTNG MIGRATOR module: http://drupal.org/project/dbtng_migrator

Configure your ../sites/default/settings.php as following:

$databases = array (
'default' =>
  array (
    'default' =>
      array (
        'database' => 'sites/default/files/.ht.sqlite',
        'driver' => 'sqlite',
        'prefix' => '',
      ),
    ),
);

 

 $databases['mysql']['default'] = array(
   'driver' => 'mysql',
  'database' => 'databasename',
  'username' => 'username',
   'password' => 'password',
  'host' => 'localhost',
  'prefix' => '',
);

Good luck! ;)